链式的队列的创建、插入、删除、遍历、取队首元素上午操作。
我们今天将的方式是比较简单的方式,没有动态的分配空间。
#include <stdio.h>
typedef struct
{
int queue[100];
int front;
int rear;
} sqqueue;
//创建一个空的队列
int initqueue(sqqueue *sq)
{
if(sq!=NULL)
{
sq->front=sq->rear=0;
return 1;
}
return 0;
}
//入队(把新元素加到队尾)
int enqueue(sqqueue *sq,int d)
{
//
if(sq==NULL)
{
printf("队列未创建,入队失败!\n");
return 0;
}
if(sq->rear>=100)
{
printf("队列已满,入队失败!\n");
return 0;
}
else
{
sq->queue[sq->rear]=d;
sq->rear=sq->rear+1;
printf("入栈的元素是%d\n",d);
return 1;
}
}
int outqueue(sqqueue *sq,int d)
{
if(sq==NULL)
{
printf("队列未创建,出队失败!\n");
return 0;
}
if(sq->front==sq->rear)
{
printf("队列为空,出队失败!\n");
return 0;
}
else
{
d=sq->queue[sq->front];
sq->front++;
printf("出栈的元素是%d\n",d);
return 1;
}
}
int traverseQueue(sqqueue *sq)
{
int d;
if(sq==NULL)
{
printf("队列未创建,遍历失败!\n");
return 0;
}
if(sq->front==sq->rear)
{
printf("队列为空,遍历失败!\n");
return 0;
}
else
{
int i=sq->front;
while(i!=sq->rear)
{
d=sq->queue[i];
printf("%d->",d);
i++;
}
return 1;
}
}
int getHead(sqqueue *sq,int *d)
{
if(sq==NULL)
{
printf("队列未创建,遍历失败!\n");
return 0;
}
if(sq->front==sq->rear)
{
printf("队列为空,遍历失败!\n");
return 0;
}
*d=sq->queue[sq->front];
printf("%d\n",*d);
printf("取队首元素成功!\n");
return 1;
}
void main()
{
sqqueue sq;
int choice,data,d;
if(initqueue(&sq)==1)
printf("队列创建成功!\n");
else
printf("队列创建失败!\n");
while(1)
{
printf("-----------------------------------------\n");
printf(" 1、入栈\n");
printf(" 2、出栈\n");
printf(" 3、遍历\n");
printf(" 4、取队首元素\n");
printf(" 5、退出\n");
printf("-----------------------------------------\n");
printf("请输入你的选择:\n");
scanf("%d",&choice);
switch(choice)
{
case 1:
printf("请输入入栈元素:\n");
scanf("%d",&data);
if(enqueue(&sq,data))
{
printf("%d入栈成功!\n",data);
}
break;
case 2:
if(outqueue(&sq,d))
printf("出栈成功!\n");
break;
case 3:
if(traverseQueue(&sq))
printf("遍历成功!\n");
break;
case 4:
getHead(&sq,&d);
break;
case 5:
return 0;
}
}
}