假设以带头结点的循环列表表示队列,并且只设一个指针指向队尾元素节点(注意不设头指针)试编写相应的置空队,判空对,入队,出队等算法。

编程入门 行业动态 更新时间:2024-10-12 01:22:35

假设以带头结点的循环列表表示队列,并且只设一个<a href=https://www.elefans.com/category/jswz/34/1768268.html style=指针指向队尾元素节点(注意不设头指针)试编写相应的置空队,判空对,入队,出队等算法。"/>

假设以带头结点的循环列表表示队列,并且只设一个指针指向队尾元素节点(注意不设头指针)试编写相应的置空队,判空对,入队,出队等算法。

注意不设头指针)试编写相应的置空队,判空对,入队,出队等算法。

步骤:1.通过InitQueue()函数来置空队

2.通过EmptyQueue()函数来判空队

3.通过EnQueue()来入队

4.通过DeQueue()来出队

算法分析

    置空:已知队尾元素节点指针,所谓置空即为头结点指向队尾元素,但当该队列中含有其他元素时通过循环语句将所有元素释放掉,回收空间。

    判空:由于该队列是由循环链表来进行表示的,所以当该队为空时,头结点的next就会指向自己。

入队:利用尾插法,再插入前要申请新的空间,将新节点由尾部连入,尾结点对应指针后移。

出队:由头部出队,p指向要出队的节点,x保存该节点中的数据,当该节点出队后该队列为空,则将队尾指针指向头结点,还有其他节点时,出队,并释放p。

程序流程图

1.置空队算法:

 2.判空队算法:

3.入队算法:

 4出队算法:

算法代码如下

/*name:雷桂艺time:2021年12月8日20:30version:1.0description:置空:已知队尾元素节点指针,所谓置空即为头结点指向队尾元素,但当该队列中含有其他元素时通过循环语句将所有元素释放掉,回收空间。判空:由于该队列是由循环链表来进行表示的,所以当该队为空时,头结点的next就会指向自己。入队:利用尾插法,再插入前要申请新的空间,将新节点由尾部连入,尾结点对应指针后移。出队:由头部出队,p指向要出队的节点,x保存该节点中的数据,当该节点出队后该队列为空,则将队尾指针指向头结点,还有其他节点时,出队,并释放p。*///算法如下//先定义链队结构typedef struct queuenode{        //结点类型的定义Datetype data;struct queuenode *next;} QueueNode;typedef struct{      //只设一个指向队尾元素的指针queuenode *rear;}LinkQueue;//置空队void InitQueue(LinkQueue *Q){     //置空队:就是使头结点成为队尾元素QueueNode *s;Q->rear = Q->rear->next;      //将队尾指针指向头结点while (Q->rear != Q->rear->next)   //当队列非空,将队中元素逐个出队{s = Q->raer->next;Q->rear->next = s->next;free(s);}         //回收结点空间}//判队空int EmptyQueue(LinkQueue *Q){/判队空,当头结点的next指针指向自己时为空队return Q->rear->next == Q->rear; /}//入队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;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;}elseQ->rear->next = p->next;free(p);                            //摘下结点preturn x;                           //释放被删结点

更多推荐

假设以带头结点的循环列表表示队列,并且只设一个指针指向队尾元素节点(注意不设头指针)试编写相应的置空队,判空对,入队,出队等算法。

本文发布于:2024-03-13 19:07:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1734618.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:指针   结点   队列   节点   算法

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!