循环队列的入队/出队-顺序存储
1.入队函数
int cir_ins_queue(char x) //将x入队
{
if((tail+1)%MAXN==head){ //队满返回1
return (1);
}
else
{
tail=(tail+1)%MAXN;
queue[tail]=x;
return (0); //插入成功返回0
}
}
2.出队函数
int cir_del_queue(char *x) //将出队元素存放到指针x所指位置并返回
{
if(tail==head) //队空,返回1
return (1);
else{
head=(head+1)%MAXN;
*x=queue[head];
return (0); //出队成功返回0
}
}
3.整体程序
#include<stdio.h>
#include<stdlib.h>
#define MAXN 4
int head=0,tail=0;
char queue[MAXN];
int cir_ins_queue(char x) //入队
{
if((tail+1)%MAXN==head){ //队满返回1
return (1);
}
else
{
tail=(tail+1)%MAXN;
queue[tail]=x;
return (0); //插入成功返回0
}
}
int cir_del_queue(char *x) //出队
{
if(tail==head)
return (1);
else{
head=(head+1)%MAXN;
*x=queue[head];
return (0);
}
}
int main(){
int m,i,j,p,q,k;
char one='A',two='B',three='C',four='D';
char *x;
x=(char*)malloc(sizeof(char));
m=cir_ins_queue(one);
if(m==0){
printf("入队成功!\n");
}else{
printf("入队失败!\n");
}
i=cir_ins_queue(two);
if(i==0){
printf("入队成功!\n");
}else{
printf("入队失败!\n");
}
j=cir_ins_queue(three);
if(j==0){
printf("入队成功!\n");
}else{
printf("入队失败!\n");
}
p = cir_ins_queue(four); //队满
if (p == 0) {
printf("入队成功!\n");
}
else {
printf("入队失败!\n");
}
k=cir_del_queue(x);
if(k==0){
printf("出队元素为:%c\n",*x);
}else{
printf("出队失败!\n");
}
printf("链表的元素是:");
for(q=head;q<=tail;q++){
printf("%5c",queue[q]);
}
}
4.运行结果
注意事项:
1.head,tail,queue需要定义为全局变量,以便于值的修改
2.出队操作中的x使用前需要动态申请空间,否则无法存放出队元素