数据结构算法习题答案带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
void InitCiQueue(CiQueue &Q)// 初始化循环 链表 表示的队列 Q {
Q=(CiLNode*)malloc(sizeof(CiLNode)); Q->next=Q; }//InitCiQueue
void EnCiQueue(CiQueue &Q,int x)// 把元素 x 插入循环链表表示的队列 素,Q->next 指向头结点 ,Q->next->next 指向队头元素 {
}
else
Q->rear->next->next=p->next;// 摘下结点 p
free(p);// 释放被删结点
return x;
}
二:
typedef struct Node
{ int data; struct Node *next; }Node,*CiLNode; typedef struct { CiLNode CiLrear; }CiQueue;
数据结构算法题 ( 假设以带头结点的循环链表表示队列 , 并且只设一个
指针指向队尾元素结点 ( 注意不设头指针 ) 试编写相应的队列初始化 , 入
队列和出队列的算法 !) ( 提供两种答案哦!!! )
一: // 既然是算法 就不用源码了 具体看注释 typedef int Datatype;
typedef struct queuenode {
Datatype data; struct queuenode *next; }QueueNode; // 以上是结点类型的定义
typedef struct {
queuenode rear; }LinkQueue; // 只设一个指向队尾元素的指针
void InitQueue( LinkQueue &Q)
Q-rear->next=p;
Q->rear=p;// 将尾指针移至新结点
}
初始化新结点并链入
Datatype DeQueue( LinkQueue &Q,Datatype &x)
{
// 出队 , 把头结点之后的元素摘下
Datatype t;
QueueNode *p;
if(EmptyQueue( Q ))
{
// 置空队:就是使头结点成为队尾元素
Q.rear=(queuenode*)malloc(sizeof(queuenode))
QueueNode* s;
Q->rear = Q->rear->next;// 将队尾指针指向头结点
while(Q->rear!=Q->rear->next) //
当队列非空,将队中元素
}
void EnQueue( LinkQueue &Q, Datatype x)
{
// 入队
// 也就是在尾结点处插入元素
QueueNode *p=(QueueNode *) malloc
(sizeof(QueueNode));// 申请新结点
p->data=x; p->next=Q->rear->next;//
Error("Queue underflow");
p=Q->rear->next->next; //p 指向将要摘下的结点
x=p->data; // 保存结点中数据
if (p==Q->rear)
{
// 当队列中只有一个结点时, p 结点出队后,
要将队尾指针指向头结点
Q->rear = Q->rear->next; Q->rear->next=p->next;
Байду номын сангаас逐个出队
{
s=Q->rear->next;
Q->rear->next=s->next;
free(s);
} // 回收结点空间
}
int EmptyQueue( LinkQueue &Q)
{
// 判队空
// 当头结点的 next 指针指向自己时为空队
return Q->rear->next->next==Q->rear->next;
if(Q==Q->next) return INFEASIBLE; //队列已空 p=Q->next->next; x=p->data; Q->next->next=p->next; free(p); return OK; }//DeCiQueue
Q 头部删除元素 x
p=(CiLNode*)malloc(sizeof(CiLNode)); p->data=x; p->next=Q->next; // 直接把 p 加在 Q 的后面 Q->next=p; Q=p; // 修改尾指针 }
Q,Q 指向队尾元
Status DeCiQueue(CiQueue &Q,int x)// 从循环链表表示的队列 {