Sundayyylsy
2021-10-16 14:49
采纳率: 80%
浏览 36

数据结构(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条回答 默认 最新

相关推荐 更多相似问题