队列的简单实现(C语言)
1 #include <iostream> 2 #include <stdlib.h> 3 #define MAX_SIZE 4 4 using namespace std; 5 typedef int ElemType; 6 typedef struct sequeue{ 7 ElemType data[MAX_SIZE]; 8 /*首尾指针*/ 9 size_t front, rear; 10 /*队列实际大小*/ 11 size_t queue_size; 12 } Sequeue; 13 void InitQueue(Sequeue * sequeue){ 14 /*一开始队头队尾都指向队列第一个位置*/ 15 sequeue->front = 0; 16 sequeue->rear = 0; 17 sequeue->queue_size = 0; 18 } 19 /*队列空,返回True*/ 20 bool QueueEmpty(Sequeue* q){ 21 /*也可以用队列的大小来判断*/ 22 //return (q->queue_size == 0); 23 return (q->rear == q->front); 24 } 25 /*队列满,返回True*/ 26 bool QueueFull(Sequeue* q){ 27 /*队尾指针指向队尾的后一个位置,逻辑上是一个环,要取余。 28 也以可用队列的实际大小来判断,由于队尾指向后一个位置所以会损失一个存储空间,故:MAX_SIZE-1*/ 29 //return (q->queue_size == MAX_SIZE-1); 30 return ((q->rear + 1) % MAX_SIZE == q->front); 31 /*下面这样写写是不对的。这是判断队列空的条件*/ 32 /*return q->rear==q->front*/ 33 } 34 bool EnQueue(Sequeue * q, ElemType data){ 35 if(QueueFull(q)) return 0; 36 q->data[q->rear] = data; 37 /*循环队列,尾指针后移*/ 38 size_t rptr = (q->rear + 1) % MAX_SIZE; 39 q->rear = rptr; 40 q->queue_size++; 41 return 1; 42 } 43 bool DeQueue(Sequeue * q, ElemType * data){ 44 if(QueueEmpty(q)) return 0; 45 *data = q->data[q->front]; 46 /*循环队列,头指针后移*/ 47 q->front = (q->front + 1) % MAX_SIZE; 48 q->queue_size--; 49 return 1; 50 } 51 int main() 52 { 53 /*测试代码*/ 54 Sequeue q; 55 InitQueue(&q); 56 EnQueue(&q, 20); 57 EnQueue(&q, 21); 58 EnQueue(&q, 22); 59 cout<<QueueFull(&q)<<endl; 60 int a; 61 DeQueue(&q, &a); 62 cout << a << endl; 63 DeQueue(&q, &a); 64 cout << a << endl; 65 DeQueue(&q, &a); 66 cout << a << endl; 67 cout<<QueueEmpty(&q)<<endl; 68 return 0; 69 }