您的位置:首页 > 其它

第3章 栈和队列——循环队列的元素的插入和删除

2013-04-30 10:04 239 查看
/*
*    这个程序是通过少用队列中的一个元素空间让队列循环。
*    并且在循环队列中实现元素的插入和删除。
*/
#include<stdio.h>
#include<stdlib.h>
#define MAXQSIZE 6 /*最大队列长度*/
typedef struct sqqueue{
char *base;
int front;
int rear;
}sqqueue;
int initqueue(sqqueue *A){ /*构造一个空队列 A */
A->base = (char *)malloc(MAXQSIZE *sizeof(char));
if(!A->base)
return 0;
A->front = A->rear = 0;
return 1;
}
int enqueue(sqqueue *A,char a){ /*插入元素 a 为 A 的新的队尾元素*/
if((A->rear+1)%MAXQSIZE == A->front) /*队列满*/
return 0;
A->base[A->rear] = a;
A->rear = (A->rear+1)%MAXQSIZE;
return 1;
}
char dequeue(sqqueue *A,char a){ /*若队列不空,则删除 A 的对头元素,用 a 返回其值*/
char t;
t = '!';
if(A->front == A->rear) /*否则返回 0 */
return t;
a = A->base[A->front];
A->front = (A->front+1)%MAXQSIZE;
return a;
}
int print(sqqueue *A){ /*把队列中的所有元素打印出来*/
int i;
for(i = A->front;i<=A->rear-1;i++){
printf("%c ",A->base[i]);
}
printf("\n");
printf("队列打印结束。\n");
return 0;
}
int main(){
sqqueue A;
char a,b,c,d,e,f,t;
if(initqueue(&A) == 1){
scanf("%c%c%c%c%c",&a,&b,&c,&d,&e);
enqueue(&A,a);
enqueue(&A,b);
enqueue(&A,c);
enqueue(&A,d);
enqueue(&A,e);
print(&A);
t = dequeue(&A,f);
printf("%c\n",t);
}
return 0;
}
/*
*  测试举例:
*  输入:
*  abcde    //注意因为接收的是字符类型,输入字符之间不可以有空格。
*           //否则存放的是空格,输出时不易看出是否正确。
*  输出:
*  a b c d e  //存放在队列中的元素。
*  队列打印结束。//打印结束证据。
*  a  //删除的队列头元素。
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: