2. 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点而不设

来源:百度知道 编辑:UC知道 时间:2024/05/15 15:57:51
哪位大仙可以解决一下啊
2. 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点而不设头指针,试编写相应的队列初始化、入队列、出队列和判断队列状态的算法。
利用上述算法完成下面的各操作,并在每一操作后输出队列状态。
1)下列元素逐一入队:5,7,3,8,55 状态:5个元素
2) 3个元素出队 状态:2个元素
3)再2个元素出队 状态:队空
4)再1个元素出队 状态:队空(指示下溢)

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
#define OVERFLOW 0
typedef struct N0de
{int data;
struct N0de *next;
}N0de,*QueuePtr;

typedef struct
{QueuePtr rear;
}LinkQueue;

int InintQueue(LinkQueue &Q)
{ Q.rear=(QueuePtr)malloc(sizeof(N0de));
if(!Q.rear) return(OVERFLOW);
Q.rear->next=Q.rear;
return OK;
}

int EnQueue(LinkQueue &Q,int e)
{QueuePtr p;
p=(QueuePtr)malloc(sizeof(N0de));
p->data=e;
p->next=Q.rear->next;
Q.rear->next=p;
Q.rear=p;
return OK;
}

int DeQueue(LinkQueue &Q,int &e)
{ QueuePtr p;
if(Q.rear->next==Q.rear)
return 0;
p=Q.rear->next->next;
e=p->data;
Q.rear->next->next=p->next;
if(Q.rear==p)
{
Q.