收藏 分销(赏)

数据结构算法-习题-答案-带头结点的循环链表表示队列-并且只设一个指针指向队尾元素结点(注意不设头指针).docx

上传人:xrp****65 文档编号:6068964 上传时间:2024-11-27 格式:DOCX 页数:3 大小:16.24KB 下载积分:10 金币
下载 相关 举报
数据结构算法-习题-答案-带头结点的循环链表表示队列-并且只设一个指针指向队尾元素结点(注意不设头指针).docx_第1页
第1页 / 共3页
数据结构算法-习题-答案-带头结点的循环链表表示队列-并且只设一个指针指向队尾元素结点(注意不设头指针).docx_第2页
第2页 / 共3页


点击查看更多>>
资源描述
数据结构算法题(假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针)试编写相应的队列初始化,入队列和出队列的算法!) (提供两种答案哦!!!) 一: //既然是算法 就不用源码了 具体看注释 typedef int Datatype; typedef struct queuenode { Datatype data; struct queuenode *next; }QueueNode; //以上是结点类型的定义 typedef struct { queuenode rear; }LinkQueue; //只设一个指向队尾元素的指针 void InitQueue( LinkQueue &Q) { //置空队:就是使头结点成为队尾元素 Q.rear=(queuenode*)malloc(sizeof(queuenode)) QueueNode* s; Q->rear = Q->rear->next;//将队尾指针指向头结点 while(Q->rear!=Q->rear->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; } void EnQueue( LinkQueue &Q, Datatype x) { //入队 //也就是在尾结点处插入元素 QueueNode *p=(QueueNode *) malloc (sizeof(QueueNode));//申请新结点 p->data=x; p->next=Q->rear->next;//初始化新结点并链入 Q-rear->next=p; Q->rear=p;//将尾指针移至新结点 } Datatype DeQueue( LinkQueue &Q,Datatype &x) { //出队,把头结点之后的元素摘下 Datatype t; QueueNode *p; if(EmptyQueue( Q )) 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; } 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; void InitCiQueue(CiQueue &Q)//初始化循环链表表示的队列Q {   Q=(CiLNode*)malloc(sizeof(CiLNode));   Q->next=Q; }//InitCiQueue void EnCiQueue(CiQueue &Q,int x)//把元素x插入循环链表表示的队列Q,Q指向队尾元素,Q->next指向头结点,Q->next->next指向队头元素 {   p=(CiLNode*)malloc(sizeof(CiLNode));   p->data=x;   p->next=Q->next; //直接把p加在Q的后面   Q->next=p;   Q=p;  //修改尾指针 } Status DeCiQueue(CiQueue &Q,int x)//从循环链表表示的队列Q头部删除元素x {   if(Q==Q->next) return INFEASIBLE; //队列已空   p=Q->next->next;   x=p->data;   Q->next->next=p->next;   free(p);   return OK; }//DeCiQueue
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服