知识大全 数据结构考研分类复习真题 第三章 答案[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相关参考
第三章 栈和队列答案 一选择题 BBABDCBDDCDBDDDCBCBDBBBDDDDCAADBBDCBCBACCFCCAAD 二判断题 √√√√×√√√√×√×××√×√×√√
见上题的解答 参见上面题 typedefstructnode elemtypeelemcq[m]; //m为队列最大可能的容量 intfrontrear;
typedefstruct elemtpq[m]; intfrontcount; //front是队首指针count是队列中元素个数 cqnode; &nbs
[题目分析]本题与上面题基本相同现用类C语言给出该双端队列的定义 #definemaxsize typedefstruct datatypeelem[maxsize]; int
#definemaxsize栈空间容量 voidInOutS(ints[maxsize]) //s是元素为整数的栈本算法进行入栈和退栈操作 inttop=;  
s=(LinkedList)malloc(sizeof(LNode))s>data=x;s>next=r>nextr>next=sr=s 牺牲一个存储单元 &n
既不能由输入受限的双端队列得到也不能由输出受限的双端队列得到的输出序列是dbca () () &nbs
本题与上题本质上相同现用类C语言编写入队和出队算法 ()voidEnQueue(LinkedListrearElemTypex) //rear是带头结点的循环链队列的尾指针本算法将元素x插入到
intMaxValue(inta[]intn)//设整数序列存于数组a中共有n个本算法求解其最大值 if(n==)max=a[]; elseifa[n]>MaxValue(an)max=
[题目分析]这是以读入数据的顺序为相反顺序进行累乘问题可将读入数据放入栈中到输入结束将栈中数据退出进行累乘累乘的初值为 PROC test; CONSTmaxsize=; VARs