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

数据结构(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 C++数组中找第二小的数字程序纠错
  • ¥50 MATLAB APP 制作出现问题
  • ¥15 wannier复现图像时berry曲率极值点与高对称点严重偏移
  • ¥15 利用决策森林为什么会出现这样·的问题(关键词-情感分析)
  • ¥15 DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI[/untitled30_war_e
  • ¥15 使用deepspeed训练,发现想要训练的参数没有梯度
  • ¥15 寻找一块做为智能割草机的驱动板(标签-stm32|关键词-m3)
  • ¥15 信息管理系统的查找和排序
  • ¥15 基于STM32,电机驱动模块为L298N,四路运放电磁传感器,三轮智能小车电磁组电磁循迹(两个电机,一个万向轮),怎么用读取的电磁传感器信号表示小车所在的位置
  • ¥15 如何解决y_true和y_predict数据类型不匹配的问题(相关搜索:机器学习)