Sundayyylsy 2021-10-16 14:49 采纳率: 66.7%
浏览 44
已结题

数据结构(C语言)队列问题


/*  数据结构算法题(假设以带头结点的循环链表表示队列,
 *  并且只设一个指针指向队尾元素结点(注意不设头指针)
 *  试编写相应的队列初始化,入队列和出队列的算法!) 
 */
#include<stdio.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0

typedef int QElemType;
typedef int Status;

typedef struct QNode
{
    QElemType data;
    struct QNode * rear;
    struct QNode * next;
}QNode;


//链式队列的初始化
Status InitLinkQueue(QNode * L)
{

    L=(QNode *)malloc(sizeof(QNode));
    if(L==NULL)
    {
        printf("内存分配失败!\n");
        return ERROR;
    }
    L->rear=NULL;
    return OK;
}

//链式队列的建立
Status Create(QNode * L,int n)
{
    int i,a; 
    for(i=0;i<n;i++)
    {
        printf("输入第%d个数据:",i+1);
        scanf("%d",&a);
        EnQueue(L,a);
    }
    return OK;
}

//入队操作
Status EnQueue(QNode * L,int e)
{
    QNode *P;
    P=(QNode *)malloc(sizeof(QNode));
    P->data=e;
    if(L->rear==NULL){
        L->rear=P;
        P->next=P;
    }
    else{
    P->next=L->rear->next;
    L->rear->next=P;}
    return OK;
}


//出队操作
Status DeQueue(QNode * L,int * e)
{
    QNode *temp,*first;
    *e=L->rear->data;
    first=temp=L->rear->next;
    while(temp->next!=L->rear) temp=temp->next;
    free(temp->next);
    temp->next=first;
    L->rear=temp;
    return OK;

}

//输出
void Print(QNode * L)
{
    QNode *P;
    P=L->rear->next;
    printf("输出元素:");
    while(P!=L->rear)
    {
        printf("%d ",P->data);
        P=P->next;
    }
    printf("%d\n",P->data);
}


int main()
{
    QNode *L;
    int ElemNumber;
    QElemType EnElem,DeElem;
    InitLinkQueue(L);
    printf("请输入元素个数:\n");
    scanf("%d",&ElemNumber);
    Create(L,ElemNumber);
    Print(L);
    printf("出队操作,并返回出队元素:\n");
    DeQueue(L,&DeElem);
    printf("出队元素为:%d\n",DeElem);
    Print(L);
    return 0;
}

img

编译无错,运行的时候就输入第一个元素卡住了,求帮忙看看哪个地方有问题!!

  • 写回答

1条回答 默认 最新

  • CSDN专家-link 2021-10-16 14:55
    关注

    这个InitLinkQueue(QNode * L)函数不能修改L的指针的,起不到创建QNode*的效果。修改如下:

    QNode* InitLinkQueue(QNode * L)
    {
     
        L=(QNode *)malloc(sizeof(QNode));
        if(L==NULL)
        {
            printf("内存分配失败!\n");
            return NULL;
        }
        L->rear=NULL;
        return L;
    }
    
    int main()
    {
        QNode *L;
        int ElemNumber;
        QElemType EnElem,DeElem;
        L = InitLinkQueue(L);
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月24日
  • 已采纳回答 10月16日
  • 创建了问题 10月16日

悬赏问题

  • ¥15 关于模型训练的一个问题
  • ¥15 装了几千台服务器从来没遇到这种问题,哎看下哪位帮我解决吧
  • ¥15 单片机程序上的困难问题
  • ¥15 请教某软件缓存Ts文件破解合并mp4的方法
  • ¥15 求小游戏炸弹人中关于敌人的C++代码
  • ¥15 拿到这个服务器最高权限有偿
  • ¥50 来个抓app跳转支付宝转链接的
  • ¥15 remotes安装提示没有description文件
  • ¥15 AttributeError: 'NoneType' object has no attribute 'drop_duplicates'报错
  • ¥15 以下代码,运行结果报错