队列是要求一端插入,另一端删除的特殊线性表,它遵循“先进先出”的特点
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 50
typedef char DateType;
typedef struct
{
DateType q[MAXSIZE];
int front,rear;
}SeqQue;
void InitQue(SeqQue* sq)
{
sq->front=sq->rear=0;
printf("\n\t\t\t初始化队列成功!");
}
int InsertQue(SeqQue* sq,DateType x)
{
if(sq->rear==MAXSIZE)
{
return 0;
}
else
{
sq->rear++;
sq->q[sq->rear]=x;
return 1;
}
}
DateType ExitQue(SeqQue* sq)
{
DateType x;
if(sq->front==sq->rear)
{
return 0;
}
else
{
x=sq->q[sq->front+1];
sq->front++;
return (x);
}
}
int LenQue(SeqQue* sq)
{
int i;
if(sq->front==sq->rear)
{
return 0;
}
else
{
i=sq->rear-sq->front;
return i;
}
}
void ShowQue(SeqQue* sq)
{
int i;
if(sq->front==sq->rear)
{
printf("\n\t\t\t队列为空!");
}
else
{
printf("\n\t\t\t队列元素为:");
printf("\n\t\t\t");
for(i=sq->front+1;i<=sq->rear;i++)
{
printf("%c\t",sq->q[i]);
}
}
}
void main()
{
SeqQue sq;
int i,j,k;
DateType x;
while(j)
{
printf("\n\n\n\n");
printf("\n\t\t\t\t\t顺序列队");
printf("\n\t\t\t**************************************");
printf("\n\t\t\t*** 1---初始化队列 ***");
printf("\n\t\t\t*** 2---入队 ***");
printf("\n\t\t\t*** 3---出队 ***");
printf("\n\t\t\t*** 4---队列长度 ***");
printf("\n\t\t\t*** 5---显示队列 ***");
printf("\n\t\t\t*** 0---退出 ***");
printf("\n\t\t\t**************************************\n");
printf("\n\t\t\t请选择菜单号(0-5):");
scanf("%d",&i);getchar();
if(i==1)
{
InitQue(&sq);
}
else if(i==2)
{
printf("\n\t\t\t请输入入队的元素:");
scanf("%c",&x);
if(InsertQue(&sq,x)==0)
{
printf("\n\t\t\t队列已满!");
}
else
{
printf("\n\t\t\t入队成功!");
}
}
else if(i==3)
{
x=ExitQue(&sq);
if(x==0)
{
printf("\n\t\t\t队列为空!");
}
else
{
printf("\n\t\t\t出队元素为:%c",x);
}
}
else if(i==4)
{
k=LenQue(&sq);
printf("\n\t\t\t队列长度为:%d",k);
}
else if(i==5)
{
ShowQue(&sq);
}
else if(i==0)
{
j=0;
printf("\n\t\t\t程序结束!\n");
}
}
}
欢迎访问我的网站:www.phpjs.cn