70,024
社区成员




#include<stdio.h>
#include<stdlib.h>
#define MAXLEN 10
typedef struct
{
int data[MAXLEN];
int front,rear;
}Csequeue;
Csequeue *q;
void InitQueue(Csequeue *q) //初始化
{
q->front=q->rear=0;
}
int IsEmpty(Csequeue * q) {
return q->front == q->rear;
}
int EnterQueue(Csequeue *q,int x) //入队
{
if((q->rear+1)%MAXLEN==q->front)
{
printf("队列已经满!\n");
return 0;
}
else
{
q->rear=(q->rear+1)%MAXLEN;
q->data[q->rear]=x;
printf("%d入队成功!\n",x);
return 1;
}
}
int Delete(Csequeue *q,int *x) //出队
{
if(q->rear==q->front)
{
printf("队列中无元素,出队失败!\n");
return 0;
}
else
{
*x=q->data[q->front];
q->front=(q->front+1)%MAXLEN;
printf("出队成功!\n");
return 1;
}
}
void Showqueue(Csequeue *q) //展示
{
if(q->rear==q->front)
{
printf("队列为空,显示失败!");
}
else
{ printf("队列中元素为:\n");
while(q->front!=q->rear)
{
printf("%5d",q->front );
q->front=(q->front+1)%MAXLEN;
}
printf("\n");
printf("显示完毕\n");
}
}
int Lenqueue(Csequeue *q) //求表长
{
return (q->rear - q->front + MAXLEN) % MAXLEN;
}
int main()
{
Csequeue q;
InitQueue(&q);
int choise,x;
printf("选择操作:\n");
printf("1. 入队\n");
printf("2. 出队\n");
printf("3. 显示队列中所有元素\n");
printf("4. 求队列长度\n");
printf("0. 退出\n");
do
{
printf("请输入您的选择:\n");
scanf("%d",&choise);
switch(choise)
{
case 1:
printf("请输入要入队的元素:\n");
scanf("%d",&x);
EnterQueue(&q,x);
break;
case 2:
Delete(&q,&x);
break;
case 3:
Showqueue(&q);
break;
case 4:
printf("队长为:%d",Lenqueue(&q));
break;
default:
printf("无效输入!\n");
break;
case 0:
printf("已退出!\n");
break;
}
}while(choise!=0);
}
调式噻,一步步运行看哪里不对噻;加数据函数里,应该先放数据,在调 rear 吧;其它,显示数据,你显示的是下标,数据应该是 q->data[q->rear] 吧,而且显示过程把数据清空了,对还是不对。