码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构--顺序循环队列和链式队列

时间:2015-06-28 18:47:21      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

第一部分:顺序循环队列的实现

 1 //循环队列的实现
 2 #define OK 1
 3 #define MAXSIZE_Q 10
 4 //#define OVERFLOW -2
 5 #define ERROR 0
 6 
 7 typedef int Status;
 8 typedef int QElemtype;
 9 
10 typedef struct{
11     QElemtype *base;  //初始化的动态分配存储空间
12     int front; //队头指针
13     int rear;  //队尾指针
14 
15 }SqQueue;
16 
17 //---------------------循环队列的基本操作的算法描述-----------------------------
18 Status InitQueue(SqQueue *q)
19 {
20     //构造一个空队列Q
21     q->base=(QElemtype*)malloc(MAXSIZE_Q*sizeof(QElemtype));
22     if(!q->base) exit(-1); //存储分配失败
23     q->front=q->rear=NULL;
24     return OK;
25 }
26 
27 int queueLength(SqQueue q)
28 {
29     //返回Q的元素个数,队列的长度
30     return (q.rear-q.front+MAXSIZE_Q)%MAXSIZE_Q;
31 }
32 
33 bool isFull(SqQueue *q)
34 {
35     if(q->front=(q->rear+1)%MAXSIZE_Q)
36         return true;
37     return false;
38 }
39 
40 bool isEmpty(SqQueue *q)
41 {
42     if(q->front==q->rear)
43         return true;
44     return false;
45 }
46 
47 Status EnQueue(SqQueue *q,QElemtype e)
48 {
49     //插入元素e为Q的新的队尾元素
50     if ((q->rear+1)%MAXSIZE_Q==q->front)
51     {
52         //队列满,不进行任何操作,不能再入队
53         return ERROR;
54     }
55     q->base[q->rear]=e;
56     //入队的操作
57     q->rear=(q->rear+1)%MAXSIZE_Q;
58     return OK;
59 }
60 
61 Status DeQueue(SqQueue *q,QElemtype *e)
62 {
63     //若队列不空,则删除Q的队头元素,用e返回值,并返回ok,否则返回error
64     if(q->rear==q->front) return ERROR;  //队列满
65     *e=q->base[q->front];  //找到删除的队头元素
66     q->front=(q->front+1)%MAXSIZE_Q;
67     return OK;
68 
69 }
70 
71 void displayQueue(SqQueue *q)
72 {
73     if (q->front==q->rear)
74     {
75         printf("队列已满\n");
76     }
77     else{
78         //遍历队列
79         int front=q->front;
80         int rear=q->rear;
81         while(front!=rear)
82         {
83             printf("%d\n",q->base[front]);
84             front++;
85         }
86     }
87 }

测试用例

 1 int main()
 2 {
 3     SqQueue q;
 4     InitQueue(&q);
 5     int i;
 6     for(i=0;i<11;i++){
 7         if(EnQueue(&q,i)==ERROR){
 8             printf("循环队列已满,该队列长度为9 \n");
 9         }
10     }
11     printf("the length of queue is %d \n",queueLength(q)); //the length of queue is 9
12     int e1,e2,e3,e4,e5;
13     DeQueue(&q,&e1);
14     DeQueue(&q,&e2);
15     DeQueue(&q,&e3);
16     DeQueue(&q,&e4);
17     DeQueue(&q,&e5);
18     printf("%d--%d--%d--%d--%d \n",e1,e2,e3,e4,e5);
19     printf("the length of queue is %d \n",queueLength(q));
20     printf("循环队列的遍历\n");
21     displayQueue(&q);
22     int e6;
23     DeQueue(&q,&e6);
24     printf("循环队列的遍历\n");
25     displayQueue(&q);
26     system("pause");
27     return 0;
28 }

 

数据结构--顺序循环队列和链式队列

标签:

原文地址:http://www.cnblogs.com/jingliming/p/4605867.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!