知识大全 数据结构考研分类复习真题 第三章 答案[22]
Posted 指针
篇首语:生也有涯,知也无涯。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 数据结构考研分类复习真题 第三章 答案[22]相关的知识,希望对你有一定的参考价值。
[题目分析]本题要求用链接结构实现一个队列 我们可用链表结构来实现 一般说 由于队列的先进先出性质 所以队列常设队头指针和队尾指针 但题目中仅给出一个 全局指针p 且要求入队和出队操作的时间复杂性是O( ) 因此我们用只设尾指针的循环链表来实现队列
PROC addq(VAR p:linkedlist x:elemtp); //p是数据域为data 链域为link的用循环链表表示的队列的尾指针 本算法是入队操作 new(s); //申请新结点 假设有内存空间 否则系统给出出错信息 s↑ data:=x; s↑ link:=p↑ link;//将s结点入队 p↑ link:=s; p:=s; //尾指针p移至新的队尾 ENDP; PROC deleq(VAR p:linkedlist VAR x:elemtp); // p是数据域为data 链域为link的用循环链表表示的队列的尾指针 本算法实现队列元素的出队 若出队成功 返回出队元素 否则给出失败信息 IF (p↑ link=p)THEN[writeln( 空队列 );return( );]//带头结点的循环队列 ELSE[s:=p↑ link↑ link; //找到队头元素 p↑ link↑ link:=s↑ link; //删队头元素 x:=s↑ data; //返回出队元素 IF (p=s) THEN p:=p↑ link; //队列中只有一个结点 出队后成为空队列 dispose(s); //回收出队元素所占存储空间 ] ENDP;
[算法讨论]上述入队算法中 因链表结构 一般不必考虑空间溢出问题 算法简单 在出队算法中 首先要判断队列是否为空 另外 对出队元素 要判断是否因出队而成为空队列 否则 可能导致因删除出队结点而将尾指针删掉成为 悬挂变量
cha138/Article/program/sjjg/201311/22701相关参考