循环队列,求助大佬:为什么显示的运行结果不对

distanthusk 2023-03-23 13:49:35

#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);
 }

...全文
92 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2023-03-23
  • 打赏
  • 举报
回复

调式噻,一步步运行看哪里不对噻;加数据函数里,应该先放数据,在调 rear 吧;其它,显示数据,你显示的是下标,数据应该是 q->data[q->rear] 吧,而且显示过程把数据清空了,对还是不对。

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧