鱼C论坛

 找回密码
 立即注册
查看: 2480|回复: 2

[已解决]为什么打印队列元素没有显示,跪求大佬帮助

[复制链接]
发表于 2020-4-26 07:32:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<stdlib.h>
#define ok 1               
#define error 0
#define overlow -1

typedef char elemtype;
typedef struct Qnode
{
        elemtype data;
        struct Qnode* next;
}qnode;

typedef struct
{
        qnode *front;
        qnode *rear;
}linkqnode;

int Initqnode(linkqnode* q)
{
        q->front = q->rear = (qnode*)malloc(sizeof(qnode));
        if (!q->front)
                exit(overlow);
        printf("队列初始化成功..\n");
        q->front->next = NULL;
        return ok;
}

int EnQueue(linkqnode* q, elemtype e)
{
        if (q->rear == q->front)
                return error;
        qnode *p;
        p=(qnode*)malloc(sizeof(qnode));
        p->data = e;
        p->next = NULL;
        q->rear->next = p;
        q->rear = p;
        return ok;
}

int DeQueue(linkqnode* q, elemtype* e)
{
        qnode *p;
        p=(qnode*)malloc(sizeof(qnode));
  if( q->front == q->rear )
        return error;

    p = q->front->next;
    *e = p->data;
    q->front->next = p->next;

    if( q->rear == p )
    {
        q->rear = q->front;
    }

    free(p);
}

int DestroyQueue(linkqnode* q)
{
        while (q->front)
        {
                q->rear = q->front->next;
                free(q->front);
                q->front = q->rear;
        }
        return ok;
}


int main()
{
        linkqnode Q;
        elemtype e;
        Initqnode(&Q);
        printf("请输入一窜字符串并以'#'结束:\n");
        scanf("%c", &e);
        while (e != '#')
        {
                EnQueue(&Q, e);
                scanf("%c", &e);
        }
        printf("打印队列中的元素:");
  while( Q.front != Q.rear )
    {
        DeQueue( &Q, &e );
        printf("%c", e);
    }
    DeQueue( &Q, &e );
    return 0;
}

啊啊啊啊,跪求大佬帮助,为什么打印队列元素没有显示。
最佳答案
2020-4-26 09:12:00
你的入队函数有问题。帮你标注出来了
#include<stdio.h>
#include<stdlib.h>
#define ok 1               
#define error 0
#define overlow -1

typedef char elemtype;
typedef struct Qnode
{
    elemtype data;
    struct Qnode* next;
}qnode;

typedef struct
{
    qnode *front;
    qnode *rear;
}linkqnode;

int Initqnode(linkqnode* q)
{
    q->front = q->rear = (qnode*)malloc(sizeof(qnode));
    if (!q->front)
            exit(overlow);
    printf("队列初始化成功..\n");
    q->front->next = NULL;
    return ok;
}

int EnQueue(linkqnode* q, elemtype e)
{
    //if (q->rear == q->front)//队列刚刚初始化的时候,q->rear和q->front本来就是一样的,你这样写,队列是无法插进去任何元素的。所以输出的时候什么也没有。
    //        return error;
    qnode *p;
    p=(qnode*)malloc(sizeof(qnode));
    if(!p)
                return error;
    p->data = e;
    p->next = NULL;
    q->rear->next = p;
    q->rear = p;
    return ok;
}

int DeQueue(linkqnode* q, elemtype* e)
{
    qnode *p;
    p=(qnode*)malloc(sizeof(qnode));
    if( q->front == q->rear )
        return error;

    p = q->front->next;
    *e = p->data;
    q->front->next = p->next;

    if( q->rear == p )
    {
        q->rear = q->front;
    }

    free(p);
    return 0;
}

int DestroyQueue(linkqnode* q)
{
    while (q->front)
    {
        q->rear = q->front->next;
        free(q->front);
        q->front = q->rear;
    }
    return ok;
}


int main()
{
        linkqnode Q;
        elemtype e;
        Initqnode(&Q);
        printf("请输入一窜字符串并以'#'结束:\n");
        scanf("%c", &e);
        while (e != '#')
        {
            EnQueue(&Q, e);
            scanf("%c", &e);
        }
        printf("打印队列中的元素:");
  while( Q.front != Q.rear )
    {
        DeQueue( &Q, &e );
        printf("%c", e);
    }
    DeQueue( &Q, &e );
    return 0;
}
QQ图片20200426072950.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-26 09:12:00 | 显示全部楼层    本楼为最佳答案   
你的入队函数有问题。帮你标注出来了
#include<stdio.h>
#include<stdlib.h>
#define ok 1               
#define error 0
#define overlow -1

typedef char elemtype;
typedef struct Qnode
{
    elemtype data;
    struct Qnode* next;
}qnode;

typedef struct
{
    qnode *front;
    qnode *rear;
}linkqnode;

int Initqnode(linkqnode* q)
{
    q->front = q->rear = (qnode*)malloc(sizeof(qnode));
    if (!q->front)
            exit(overlow);
    printf("队列初始化成功..\n");
    q->front->next = NULL;
    return ok;
}

int EnQueue(linkqnode* q, elemtype e)
{
    //if (q->rear == q->front)//队列刚刚初始化的时候,q->rear和q->front本来就是一样的,你这样写,队列是无法插进去任何元素的。所以输出的时候什么也没有。
    //        return error;
    qnode *p;
    p=(qnode*)malloc(sizeof(qnode));
    if(!p)
                return error;
    p->data = e;
    p->next = NULL;
    q->rear->next = p;
    q->rear = p;
    return ok;
}

int DeQueue(linkqnode* q, elemtype* e)
{
    qnode *p;
    p=(qnode*)malloc(sizeof(qnode));
    if( q->front == q->rear )
        return error;

    p = q->front->next;
    *e = p->data;
    q->front->next = p->next;

    if( q->rear == p )
    {
        q->rear = q->front;
    }

    free(p);
    return 0;
}

int DestroyQueue(linkqnode* q)
{
    while (q->front)
    {
        q->rear = q->front->next;
        free(q->front);
        q->front = q->rear;
    }
    return ok;
}


int main()
{
        linkqnode Q;
        elemtype e;
        Initqnode(&Q);
        printf("请输入一窜字符串并以'#'结束:\n");
        scanf("%c", &e);
        while (e != '#')
        {
            EnQueue(&Q, e);
            scanf("%c", &e);
        }
        printf("打印队列中的元素:");
  while( Q.front != Q.rear )
    {
        DeQueue( &Q, &e );
        printf("%c", e);
    }
    DeQueue( &Q, &e );
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-26 12:08:49 | 显示全部楼层
sunrise085 发表于 2020-4-26 09:12
你的入队函数有问题。帮你标注出来了

大哥,非常感谢啊,我一直以为是我的出队函数有问题,啊,非常感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-23 03:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表