/* 数据结构算法题(假设以带头结点的循环链表表示队列,
* 并且只设一个指针指向队尾元素结点(注意不设头指针)
* 试编写相应的队列初始化,入队列和出队列的算法!)
*/
#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;
}
编译无错,运行的时候就输入第一个元素卡住了,求帮忙看看哪个地方有问题!!