数据结构C语言编程 队列
#include
#include
#define MAXQSIZE 10
typedef struct
{
int *base; //存储空间的起始地址,即数组的首地址,即数组名
int front; //顺序存储,即地址,所以用下标表示元素,front是第一个元的下标
int rear; //rear是最后一个元素的下标
}SqQueue;
void InitQueue(SqQueue & Q)//构造一个空队列
{
Q.base =(int *)malloc(MAXQSIZE *sizeof(int));
if(!Q.base )
{
printf("构造队列失败!\n");
exit(1);
}
Q.front =Q.rear =0;
printf(" ----------队列构造成功,可容纳%d个元素!---------\n",MAXQSIZE);
}
int QueueLength(SqQueue &Q)
{
return (Q.rear -Q.front +MAXQSIZE) % MAXQSIZE;
}
void EnQueue(SqQueue &Q)//入队列
{
int e;
if(QueueLength(Q)==MAXQSIZE)
{
printf("队列已满!\n");
return;
}
scanf("%d",&e);
Q.base [Q.rear ]=e;
Q.rear =(Q.rear +1)%MAXQSIZE;
}
int DeQueue(SqQueue &Q,bool &T)//出队列
{
if(QueueLength(Q)==0)
{
printf("队列元素为空\n");
T=false;
return 0;
}
T=true;
Q.front =(Q.front +1)%MAXQSIZE;
return Q.base [(Q.front-1)%MAXQSIZE];
}
void print(SqQueue &Q)
{
printf("\n\n ----------当前队列有%d个元素!----------\n\n\n",QueueLength(Q));
}
int display(SqQueue &Q)
{
for (int i=Q.front;i!=Q.rear%MAXQSIZE;i=(i+1)%MAXQSIZE)
printf(" %d",Q.base[i]);
return 0;
}
int main()
{
int n,m,temp,i;
bool T=true;
SqQueue Q;
InitQueue(Q);
printf("0 -->入队列\n1 -->出队列\n2 -->退出\n请选择:");
scanf("%d",&n);
while(n!=2)
{
switch(n)
{
case 0:
printf("请输入所要入队列的元素的个数:");
scanf("%d",&m);
printf("请依次输入所要队列的元素的权值:\n");
for(i=1;i<=m;i++)
EnQueue(Q);
printf("当前队列中的元素为:\n");
display(Q);
print(Q);
break;
case 1:
printf("请输入所要出队列的元素的个数:");
scanf("%d",&m);
printf("出队列的元素为:");
for(i=1;i<=m;i++)
{
temp=DeQueue(Q,T);
if(T)
printf("%d ",temp);
}
print(Q);
break;
case 2:
return 0;
}
printf("0 -->入队列\n1 -->出队列\n2 -->退出\n请选择:");
scanf("%d",&n);
}
return 1;
}