Zz1Heng 2023-05-11 23:19 采纳率: 0%
浏览 25

关于队列出队的问题,如何解决?

一运行到出队就发生这样。

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define Maxsize 100
typedef int Datatype;
typedef struct {
    Datatype data[Maxsize];
    int front;
    int rear;
}SqQueue;
//初始化;
void initQueue(SqQueue* Q) {
    Q->front = Q->rear = 0;
}
//判空;
bool empty(SqQueue* Q) {
    if (Q->rear == 0)
        printf("为空\n");
    else
        printf("非空\n");
    return 1;
}
//判满
bool isfull(SqQueue* Q) {
    if (Q->rear == Maxsize)
        printf("已满\n");
    else
        printf("非满\n");
    return 1;
}
//入队;
bool push(SqQueue* Q, Datatype x) {
    if (Q->rear == Maxsize)
        return 0;
    else
        Q->data[Q->rear++] = x;
    return 1;
}
//出队;
bool pop(SqQueue* Q, Datatype &x) {
    if (Q->rear == 0)
        return 0;
    else
        x = Q->data[Q->front++];
    return 1;
}
//计算队列长度;
int getlength(SqQueue* Q) {
    int L = 0;
    L = (Q->rear - Q->front + Maxsize) % Maxsize;
    printf("%d", L);
    return L;
}
//读取队列
void sqqueueprintf(SqQueue*Q) {
    while (Q->front!=Q->rear)
    {
        printf("%6d", Q->data[Q->front++]);
    }
}
int main() {
    SqQueue Q;
    Datatype x;
    initQueue(&Q);
    empty(&Q);
    for (int i = 0; i < 5; i++)
    {
        push(&Q, i);
    }
    int i = 1;
    while (i)
    {
        printf("当前的队列如下:\n");
        sqqueueprintf(&Q);
        printf("\n");
        printf("------------------------------------\n");
        printf("         Main Menu         \n");
        printf("    1   入队    \n");
        printf("    2   出队   \n");
        printf("    3   清屏   \n");
        printf("    0   结束程序      \n");
        printf("------------------------------------\n");
        printf("请输入你选择的菜单号<1, 2, 3, 0>:\n");
        scanf_s("%d", &i);
        switch (i)
        {
        case 1:
            printf("请输入入队元素:");
            scanf_s("%d", &x);
            push(&Q, x);
            printf("\n\n");
            break;
        case 2:
            pop(&Q, x);
            printf("\n\n");
            break;
        case 3:
            system("cls");
            break;
        case 0:
            exit(0);
            break;
        default:
            printf("输入有误\n");
            break;
        }
    }
    return 0;
}

img

  • 写回答

2条回答 默认 最新

  • threenewbee 2023-05-12 07:06
    关注

    你连怎么输入的也没给出

    但是一眼就能看到问题

    bool empty(SqQueue* Q) {
        if (Q->rear == 0)
            printf("为空\n");
        else
            printf("非空\n");
        return 1;
    }
    
    

    这个代码,无论是否为空,都返回1

    评论

报告相同问题?

问题事件

  • 创建了问题 5月11日