首页 > 其他 > 详细

14 一个完整的顺序队列代码

时间:2019-10-23 00:27:46      阅读:240      评论:0      收藏:0      [点我收藏+]

队列:顺序实现

 

项目结构:

技术分享图片

 

main.cpp:

技术分享图片
#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#include "function_for_SqQueue.h"
using namespace std;

int main()
{
    TestSqQueue();

    return 0;
}
View Code

function_for_SqQueue.h:

技术分享图片
#ifndef FUNCTION_FOR_SQQUEUE_H_INCLUDED
#define FUNCTION_FOR_SQQUEUE_H_INCLUDED

#define MAXSIZE 100

typedef char ElemType;

typedef struct{
        ElemType *base;     //初始化的动态分配存储空间
        int head;       //对头元素下标
        int rear;       //队尾元素的下一个位置
}SqQueue;

/*
    循环队列
    ----解决 ‘ 假上溢 ’
*/
//初始化
void InitQueue(SqQueue &Q);

//求队列长度
int QueueLength(SqQueue Q);

//(队尾)入队
void InsertQueue(SqQueue &Q, ElemType e);

//(队头)出队
ElemType DelHeadQueue(SqQueue &Q);

//取队头元素
ElemType GetHead(SqQueue &Q);

//打印队列元素(从头到尾)
void PrintQueue(SqQueue &Q);

//测试
void TestSqQueue();

#endif // FUNCTION_FOR_SQQUEUE_H_INCLUDED
View Code

function_for_SqQueue.cpp:

技术分享图片
#include<stdio.h>
#include<stdlib.h>
#include "function_for_SqQueue.h"

/*
    循环队列
    ----解决 ‘ 假上溢 ’
*/
//初始化
void InitQueue(SqQueue &Q){
    Q.base = (ElemType *)malloc(sizeof(SqQueue) * MAXSIZE);
    if(!Q.base)     exit(0);        //若存储分配失败,则退出
    Q.head=0;       //首尾下标置为0,表示队列为空
    Q.rear=0;
}

//求队列长度
int QueueLength(SqQueue Q){
    return ((Q.rear-Q.head+MAXSIZE)%MAXSIZE);       //核心算法
}

//(队尾)入队
void InsertQueue(SqQueue &Q, ElemType e){
    if((Q.rear+1)%MAXSIZE == Q.head)        exit(0);        //队列已满,不可插入
    Q.base[Q.rear] = e;
    Q.rear = (Q.rear+1)%MAXSIZE;        //队尾下标加1
}

//(队头)出队
ElemType DelHeadQueue(SqQueue &Q){
    if(Q.head == Q.rear)        exit(0);        //队空
    ElemType e = Q.base[Q.head];
    Q.head = (Q.head+1)%MAXSIZE;        //队头指针加1
    return e;       //返回队头元素数据域
}

//取队头元素
ElemType GetHead(SqQueue &Q){
    if(Q.head != Q.rear){       //队列不为空
        return Q.base[Q.head];      //获取队头元素的值,队列本身不变
    }
}

//打印队列元素(从头到尾)
void PrintQueue(SqQueue &Q){
    int p=Q.head;       //设置游标,开始时指向队头位置
    while(p != Q.rear){
        printf("%c ", Q.base[p]);
        p = (p+1)%MAXSIZE;
    }
}

//测试
void TestSqQueue(){
    SqQueue Q;

    printf("\n初始化:\n");
    InitQueue(Q);

    printf("\n依次插入元素(a,b,c,d,e):\n");
    InsertQueue(Q, a);
    InsertQueue(Q, b);
    InsertQueue(Q, c);
    InsertQueue(Q, d);
    InsertQueue(Q, e);

    printf("\n打印队列(从头到尾):\n");
    PrintQueue(Q);

    printf("\n再插入一个元素:\n");
    InsertQueue(Q, f);

    printf("\n打印队列(从头到尾):\n");
    PrintQueue(Q);

    printf("\n出队列:\n");
    printf("出队列后获得队头元素:%c\n", DelHeadQueue(Q));

    printf("\n打印队列(从头到尾):\n");
    PrintQueue(Q);

    printf("\n此时获取队头元素:%c\n", GetHead(Q));

    printf("\n打印队列(从头到尾):\n");
    PrintQueue(Q);

}
View Code

 

运行结果:

技术分享图片

14 一个完整的顺序队列代码

原文:https://www.cnblogs.com/CPU-Easy/p/11723591.html

(1)
(1)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!