C语言链队销毁问题(求求帮帮孩子)

发布于 2022-09-12 22:36:44 字数 2511 浏览 22 评论 0

那位大佬知道啊!我调试一直不行,那位好心得大佬帮帮忙啊!我实在是不行了,孩子求求了。出问题的代码

出问题的代码:

Status DestroyQueue(LinkQueue Q)  //从队头结点依次销毁
{
    while (Q.front)
    {
        Q.rear = Q.front->next;
        free(Q.front);
        Q.front = Q.rear;
    }
    return OK;
}

运行后如下:
运行后如下:
全部源码:

#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define FALSE 0
typedef int ElemType;
typedef int Status;
typedef struct QNode
{
    ElemType data;
    struct QNode* next;
}QNode, *Queueptr;
typedef struct
{
    Queueptr front;  //队头指针
    Queueptr rear;   //队尾指针
}LinkQueue;
Status InitQueue(LinkQueue* Q);  //初始化
Status InsertQueue(LinkQueue* Q, ElemType e); //入队
Status DeletQueue(LinkQueue* Q, ElemType* e); //出队
Status GetHead(LinkQueue Q);   //取头结点元素
Status DestroyQueue(LinkQueue Q);  //销毁
int main()
{
    LinkQueue Q;
    ElemType e, a;
    int n;
    if (InitQueue(&Q) == 1)
        printf("构建链队成功!\n");
    printf("入队元素个数:");
    scanf("%d", &n);
    printf("请输入入队元素:");
    for (int i = 0; i < n; i++)
    {
        scanf("%d", &e);
        InsertQueue(&Q, e);
    }
    printf("入队成功!\n");
    a=GetHead(Q);
    if (a != 0)
        printf("队头元素为:%d\n", a);
    else
        printf("队空!无头元素!\n");
     if (DeletQueue(&Q, &e) == 0)
        printf("队为空!无法出队!\n");
    else
    printf("出队元素为:%d\n", e);
    DestroyQueue(Q);
    printf("销毁完毕!");
    return 0;
}
Status InitQueue(LinkQueue* Q)
{
    Q->front = Q->rear = (Queueptr)malloc(sizeof(QNode));
    if (!Q->front)
        exit(0);
    Q->front->next  = NULL;
    return OK;
}
Status InsertQueue(LinkQueue* Q, ElemType e)
{
    Queueptr P;
    P = (Queueptr)malloc(sizeof(QNode));
    if (!P)
        exit(0);
    P->data = e;
    Q->rear->next = P;
    Q->rear = P;
    return OK;
}
Status GetHead(LinkQueue Q)
{
    if (Q.front == Q.rear)
        return FALSE;
    return (Q.front->next->data);
}
Status DeletQueue(LinkQueue* Q, ElemType* e)
{
    Queueptr P;
    if (Q->front == Q->rear)   //队空
        return FALSE;
    P = Q->front->next;
    *e = P->data;
    Q->front->next = P->next;
    if (Q->rear == P)   //当删除到尾结点时
        Q->rear = Q->front;
    free(P);
    return OK;
}
Status DestroyQueue(LinkQueue Q)  //从队头结点依次销毁
{
    while (Q.front)
    {
        Q.rear = Q.front->next;
        free(Q.front);
        Q.front = Q.rear;
    }
    return OK;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

星星的軌跡 2022-09-19 22:36:44

malloc分配的空间没做初始化。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文