知识大全 数据结构考研分类复习真题 第三章 答案[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

相关参考