/* * 用c语言实现顺序队列(存在假溢出现象,即队列中有空间却无法插入) */ #include<stdio.h> #include<stdlib.h> typedef struct queue { //用来保存元素的数组 int *a; //队头元素下标 int front; //队尾元素下标 int rear; //数组最多容纳的元素个数 int max; }qu; /* * 初始化num个字节大小的队列 */ qu *initqueue(int num) { qu *q=(qu *)malloc(sizeof(qu)); if(q==NULL) { printf("create fail!\n"); exit(1); } q->front=0; q->rear=0; q->max=num; q->a=(int *)malloc(sizeof(int)*num); return q; } /* * 判断队列是否为空(空:返回0 非空:返回1) */ int isempty(qu *q) { //为空 if(q->front==q->rear)return 0; return 1; } /* * 入队列 */ void push(qu *q,int value) { //队列未装满 if(q->rear<q->max) { q->a[q->rear]=value; q->rear++; } //队列已满 else { printf("队列已满,无法插入!\n"); exit(1); } } /* * 出队列 */ int pop(qu *q) { if(isempty(q)==0) { printf("对列为空,无法出队列!\n"); exit(1); } int value=q->a[q->front]; q->front++; return value; } /* * 查看队头元素 */ int peek(qu *q) { if(isempty(q)==0) { printf("对列为空,无法查看队头元素!\n"); exit(1); } int value=q->a[q->front]; return value; } int main() { int num=3; qu *q=initqueue(num); push(q,1); push(q,2); push(q,3); int temp=pop(q); printf("出队列元素=%d\n",temp); //无法插入,因为存在假溢出问题 push(q,4); temp=pop(q); printf("出队列元素=%d\n",temp); return 0; }