1-6 循环队列入队出队
分数 4
作者 张瑞霞
单位 桂林电子科技大学
本题要求实现队列的顺序存储表示,包括入队、出队和取队头操作
函数接口定义:
1 2 3
| void EnQueue_seq(SeqQueue squeue, DataType x) ; void DeQueue_seq(SeqQueue squeue) ; DataType FrontQueue_seq(SeqQueue squeue) ;
|
其中,squeue 是操作的队列,x是入队的元素
裁判测试程序样例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
| #include <stdio.h> #include <stdlib.h> typedef char DataType; struct Queue { int Max; int f; int r; DataType *elem; }; typedef struct Queue *SeqQueue;
SeqQueue SetNullQueue_seq(int m) { SeqQueue squeue; squeue = (SeqQueue)malloc(sizeof(struct Queue)); if (squeue == NULL) { printf("Alloc failure\n"); return NULL; } squeue->elem = (char*)malloc(sizeof(DataType)*m); if (squeue->elem != NULL) { squeue->Max = m; squeue->f = 0; squeue->r = 0; return squeue; } }
int IsNullQueue_seq(SeqQueue squeue) { return (squeue->f == squeue->r); } void EnQueue_seq(SeqQueue squeue, DataType x) { @@ } void DeQueue_seq(SeqQueue squeue) { @@ } DataType FrontQueue_seq(SeqQueue squeue) { @@ }
int main() { char ch; SeqQueue queueA = SetNullQueue_seq(5); ch = getchar(); while (ch != '#') { EnQueue_seq(queueA, ch); ch = getchar(); } DeQueue_seq(queueA); printf("%c" ,FrontQueue_seq(queueA)); return 0; }
|
输入样例:
输出样例:
输入样例:
输出样例:
输入样例:
输出样例:
1
| It is FULL Queue!It is FULL Queue!B
|
要记住循环队列是先放入尾指针的地方,尾指针再++,出循环队列是头指针++


答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| void EnQueue_seq(SeqQueue squeue, DataType x) { if ((squeue->r + 1 + squeue->Max) % squeue->Max == squeue->f) { printf("It is FULL Queue!"); return; } squeue->elem[squeue->r] = x; squeue->r = (squeue->r + 1) % squeue->Max; }
void DeQueue_seq(SeqQueue squeue) { if (squeue->f == squeue->r) { return; } squeue->f = (squeue->f + 1) % squeue->Max; }
DataType FrontQueue_seq(SeqQueue squeue) { if (squeue->f == squeue->r) { printf("It is empty queue!"); return 0; } return squeue->elem[squeue->f]; }
|