C语言实现对队列的基本操作
C语言实现对队列的基本操作
代码思想:
(1)定义循环队列:rear指针指向队列的最后一个元素所在位置,front指针则指向第一个元素的前一个位置。并且rear和front都只能单方向移动。
(2)入队操作:先判断队列是否溢出->在队尾插入需要插入的元素作为新的队尾。
(3)出队和取队头操作:判断队列是否为空->删除队头元素,并返回该元素->front+1;
代码实现的功能:
1.插入队列 2.取出队列 3.取出队头元素 4.判断是否为空队列 5.清空该队列
代码内容:
#include<stdio.h>
#include<stdlib.h>
typedef int boolean;
#define true 1
#define false 0
typedef struct queue{
int element[50];
int rear;
int front;
}*Squeue,Queue;
void InsQueue(Squeue q){
int num,i=0,record=0;
printf("请输入您想入队的元素个数:");
scanf("%d",&num);
for(i;i<num;i++)
{
printf("请输入第%d个元素:",i+1);
if(++q->rear<=9)
{
if(q->rear==q->front&&record==1)
{
printf("数据溢出\n");
system("pause");
exit(1);
}
else if(q->rear==q->front)
{
record++;
}
scanf("%d",&q->element[q->rear]);
}
else
{
q->rear-=10;
scanf("%d",&q->element[q->rear]);
if(q->rear==q->front)
{
printf("数据溢出\n");
system("pause");
exit(1);
}
}
}
}
void DelQueue(Squeue q){
if(IsEmpty(q)){
printf("不存在队列\n");
q->front=0;
}else{
printf("队列为:");
do{
printf("%d-->",q->element[q->front]);
q->front++;
}while(!IsEmpty(q));
printf("end\n");
}
}
void GetFront(Squeue q)
{
int i;
if(IsEmpty(q))
printf("不存在该队列\n");
else
printf("队首元素为:%d\n",q->element[q->front]);
}
boolean IsEmpty(Squeue q){
if(q->rear==-1||q->front-1==q->rear)
return true;
else
return false;
}
void EnEmpty(Squeue q){
q->front=0;
q->rear=-1;
printf("sucess!\n");
}
void main(){
int input;
Squeue q;
q=(Squeue)malloc(sizeof(Queue));
q->front=0;
q->rear=-1;
while(1)
{
printf("1.Insert Queue\n");
printf("2.Get Queue\n");
printf("3.Get Front\n");
printf("4.IS queue empty?\n");
printf("5.Clear Queue\n");
printf("6.Exit\n");
scanf("%d",&input);
switch(input)
{
case 1:
InsQueue(q);
break;
case 2:
DelQueue(q);
break;
case 3:
GetFront(q);
break;
case 4:
if(IsEmpty(q))
printf("不存在该队列\n");
else
printf("存在该队列\n");
break;
case 5:
EnEmpty(q);
break;
case 6:
exit(0);
default :
printf("input error!\n");
break;
}
}
}
测试截图:
1.插入和取出队列:
2.取队头元素:
3.判断是否为空队列:
博客园:https://www.cnblogs.com/newtol
微信公众号:Newtol
【转发请务必保留原作者,否则保留追责权利】