数据结构-队列的顺序存储(循环队列)

 1 #include "stdio.h"
 2 #include "stdlib.h"
 3 
 4 #define OK 1
 5 #define ERROR 0
 6 #define OVERFLOW -1
 7 #define MAXQSIZE 100
 8 typedef int QElemType;
 9 typedef int Status;
10 
11 typedef struct
12 {
13     QElemType *base;
14     int front;
15     int rear;
16 }SqQueue;
17 
18 Status InitQueue(SqQueue &Q)
19 {
20     Q.base = (QElemType *)malloc(MAXQSIZE * sizeof(QElemType));
21     if(!Q.base)
22         exit(OVERFLOW);
23     Q.front = Q.rear = 0;
24     return OK;
25 }
26 
27 Status DestroyQueue(SqQueue &Q)
28 {
29     if(Q.base)
30         free(Q.base);
31     else
32         return ERROR;
33     Q.base = NULL;
34     Q.front = Q.rear = 0;
35     return OK;
36 }
37 
38 Status ClearQueue(SqQueue &Q)
39 {
40     Q.front = Q.rear = 0;
41     return OK;
42 }
43 
44 bool QueueEmpty(SqQueue Q)
45 {
46     if(Q.front == Q.rear)
47         return true;
48     else
49         return false;
50 }
51 
52 int QueueLength(SqQueue Q)
53 {
54     return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
55 }
56 
57 Status GetHead(SqQueue Q, QElemType &e)
58 {
59     if(QueueEmpty(Q))
60         return ERROR;
61     e = Q.base[Q.front];
62     return OK;
63 }
64 
65 Status EnQueue(SqQueue &Q, QElemType e)
66 {
67     if((Q.rear + 1) % MAXQSIZE == Q.front)
68         return ERROR;
69     Q.base[Q.rear] = e;
70     Q.rear = (Q.rear + 1) % MAXQSIZE;
71     return OK;
72 }
73 
74 Status DeQueue(SqQueue &Q, QElemType &e)
75 {
76     if(QueueEmpty(Q))
77         return ERROR;
78     e = Q.base[Q.front];
79     Q.front = (Q.front + 1) % MAXQSIZE;
80     return OK;
81 }

函数用处与之前写的链队列的基本操作函数作用是一样的,一些操作基本上也是重复之前写的顺序存储的,所以在这里没有写任何的注释(其实是懒了),不过也可能你根本看不到这句话,因为复制完代码就走了。

posted @ 2016-05-07 11:00  A_book  阅读(551)  评论(0编辑  收藏  举报