数据结构(严蔚敏版)循环队列——C语言

数据结构(严蔚敏版)循环队列——C语言,第1张

数据结构(严蔚敏版)循环队列——C语言

大家好!这里是小野,一名二本学校努力的大二学生,正在努力学习数据结构,打算将其所有结构的源码写出与大家一起交流,期待与大家一起进步,互相成长!!! 循环队列

由一组地址连续的储存单元依次存放从队列头到队尾的元素,分别用front与rear指针指示队列头元素及队列尾元素的位置,并定义初始值为0,随后逐步增加并取余总空间的方式来确定位置。

完整代码如下:

#include 
#include 
#include  
#define OVERFLOW -2
#define OK 1
#define TRUE 1
#define ERROR 0
#define FALSE 0
typedef int Status;
#define MAXQSIZE 5 
typedef int QElemType; 
typedef struct
 {
   QElemType *base; 
   int front; 
   int rear; 
 }SqQueue;
Status InitQueue(SqQueue *Q)
 { 
   Q->base=(QElemType *)malloc(MAXQSIZE*sizeof(QElemType));
   if(!Q->base) 
     exit(OVERFLOW);
    Q->front=Q->rear=0;
   return OK;
 }

 
 int QueueLength(SqQueue Q)
 { 
   return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
 }


 Status EnQueue(SqQueue *Q,QElemType e)
 { 
   if((Q->rear+1)%MAXQSIZE==Q->front) 
     return ERROR;
    Q->base[Q->rear]=e;
    Q->rear=(Q->rear+1)%MAXQSIZE;
   return OK;
 }

 Status DeQueue(SqQueue *Q,QElemType *e)
 { 
   if(Q->front==Q->rear) 
     return ERROR;
   *e=Q->base[Q->front];
   Q->front=(Q->front+1)%MAXQSIZE;
   return OK;
 }

 Status QueuePrint(SqQueue Q)
 { 
   int i;
   i=Q.front;
   while(i!=Q.rear)
   {
       printf("%d ",*(Q.base+i));
       i=(i+1)%MAXQSIZE;
   }
   printf("n");
   return OK;
 }

int main()
 {
   Status j;
   int i=0,l;
   QElemType e;
   SqQueue Q;
   InitQueue(&Q);
   printf("请输入整型队列元素(不超过%d个),-1为提前结束符: ",MAXQSIZE-1);
   do
   {
     scanf("%d",&e);
     if(e==-1)
       break;
     i++;
     EnQueue(&Q,e);
   }while(i 

运行结果:

对于我的理解,循环队列的存储方式与顺序表的存储方式相似,需要注意的是通过取余来对队头与队尾的位置不断更新定位,其余的 *** 作都比较简单。

大家如果浏览了我的博客发现我有错误的地方,麻烦谅解,并在评论中告诉我。谢谢!

加油加油加油!!!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5702282.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-17
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存