/** * 实验题目: * 实现顺序队列各种基本运算的算法 * 实验内容: * 编写程序,实现顺序队列的各种基本运算,并在此基础上设计一个主程序,完成如下功能: * (1)初始化队列q * (2)判断队列q是否非空 * (3)依次进队列元素a,b,c * (4)出队一个元素,输出该元素 * (5)输出队列q的元素个数 * (6)依次进队列元素d,e,f * (7)输出队列q的元素个数 * (8)输出出队序列 * (9)释放队列 */ #include <stdio.h> #include <malloc.h>
#define MaxSize 5
typedef char ElemType; typedef struct { ElemType data[MaxSize]; int front; // 队首指针 int rear; // 队尾指针 }SqQueue;
/*-----------------------初始化队列q---------------------------*/ void InitQueue(SqQueue *&q) // 指针的引用 { q = (SqQueue *)malloc(sizeof(SqQueue)); q->front = q->rear = 0; }
/*-----------------------释放队列q---------------------------*/ void ClearQueue(SqQueue *&q) { free(q); }
/*-----------------------求队列q的长度---------------------------*/ int QueueLength(SqQueue *q) { return (q->rear - q->front + MaxSize) % MaxSize; }
/*-----------------------判断队列q是否为空---------------------------*/ int QueueEmpty(SqQueue *q) { return (q->front == q->rear); }
/*-----------------------进队一个元素e---------------------------*/ int EnQueue(SqQueue *&q, ElemType e) { if((q->rear + 1) % MaxSize == q->front) // 队满 return 0; q->rear = (q->rear + 1) % MaxSize; q->data[q->rear] = e; return 1; }
/*-----------------------出队一个元素---------------------------*/ int DeQueue(SqQueue *&q, ElemType &e) { if(q->front == q->rear) // 队空 return 0; q->front = (q->front + 1) % MaxSize; e = q->data[q->front]; return 1; }
int main(void) { ElemType e; SqQueue *q; printf("(1)初始化队列q\n"); InitQueue(q); printf("(2)依次进队列元素a,b,c\n"); if(EnQueue(q, 'a') == 0) printf("队满,a不能进队\n"); if(EnQueue(q, 'b') == 0) printf("队满,b不能进队\n"); if(EnQueue(q, 'c') == 0) printf("队满,c不能进队\n"); printf("(3)队列为%s\n", (QueueEmpty(q) ? "空" : "非空")); if(DeQueue(q, e) == 0) printf("队空,不能出队\n"); else printf("(4)出队一个元素%c\n", e); printf("(5)队列q的元素个数:%d\n", QueueLength(q)); printf("(6)依次进队列元素d,e,f\n"); if(EnQueue(q, 'd') == 0) printf("队满,d不能进队\n"); if(EnQueue(q, 'e') == 0) printf("队满,e不能进队\n"); if(EnQueue(q, 'f') == 0) printf("队满,f不能进队\n"); printf("(7)队列q的元素个数:%d\n", QueueLength(q)); printf("(8)出队序列:"); while(!QueueEmpty(q)) { DeQueue(q, e); printf("%c ", e); } printf("\n"); printf("(9)释放队列\n"); ClearQueue(q); return 0; }
测试结果:
(1)初始化队列q (2)依次进队列元素a,b,c (3)队列为非空 (4)出队一个元素a (5)队列q的元素个数:2 (6)依次进队列元素d,e,f 队满,f不能进队 (7)队列q的元素个数:4 (8)出队序列:b c d e (9)释放队列
