- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构C语言三章 栈和队列
第三章 栈队列p1,p2,p3,…,pn,若p1 n,则pi为( )。 A.i B.n-i C.n-i+1 D.不确定
(3)数组Q[n]用来表示一个循环队列,f为当前队列头元素的前一位置,r为队尾元素的位置,假定队列中元素的个数小于n,计算队列中元素个数的公式为( )。
A.r-f B. n+f-r %n C.n+r-f D.(n+r-f %n
(4)链式栈结点为: data,link ,top指向栈顶.若想摘除栈顶结点,并将删除结点的值保存到x中,则应执行操作( )。
A.x top- data;top top- link; B.top top- link;x top- link; C.x top;top top- link; D.x top- link;
(5)设有一个递归算法如下 int fact int n //n大于等于0 if n 0 return 1; else return n*fact n-1 ; 则计算fact n 需要调用该函数的次数为( )。?
A.?n+1 B.?n-1 C. n D. n+2
(6)栈在?( )中有所应用。
A.递归调用 B.函数调用 C.表达式求值 D.前三个选项都有
(7)为解决计算机主机与打印机间速度不匹配问题,通常设一个打印数据缓冲区。主机将要输出的数据依次写入该缓冲区,而打印机则依次从该缓冲区中取出数据。该缓冲区的逻辑结构应该是( )。
A.队列 B.栈 C. 线性表 D.有序表
(8)设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次进入栈S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是( )。
A.2 B.3 C.4 D. 6
(9)在一个具有n个单元的顺序栈中,假设以地址高端作为栈底,以top作为栈顶指针,则当作进栈处理时,top的变化为( )。
A.top不变 B.top 0 C.top-- D.top++
(10)设计一个判别表达式中左,右括号是否配对出现的算法,采用( )数据结构最佳。
A.线性表的顺序存储结构 B.队列 C. 线性表的链式存储结构 D. 栈
(11)用链接方式存储的队列,在进行删除运算时( )。
A. 仅修改头指针 B. 仅修改尾指针
C. 头、尾指针都要修改 D. 头、尾指针可能都要修改
(12)循环队列存储在数组A[0..m]中,则入队时的操作为( )。
A. rear rear+1 B. rear rear+1 % m-1 C. rear rear+1 %m D. rear rear+1 % m+1
(13)最大容量为n的循环队列,队尾指针是rear,队头是front,则队空的条件是( )。
A. rear+1 %n front B. rear front C.rear+1 front D. rear-l %n front
(14)栈和队列的共同点是( )。
A. 都是先进先出 B. 都是先进后出 C. 只允许在端点处插入和删除元素 D. 没有共同点
(15)一个递归算法必须包括( )。
A. 递归部分 B. 终止条件和递归部分
C. 迭代部分 D. 终止条件和迭代部分
二、算法设计题
1.Ackerman 函数定义如下:请写出递归算法。 ┌ n+1 当m 0时
AKM m , n │ AKM m-1 ,1 当m≠0 ,n 0时 └ AKM m-1, AKM m,n-1 当m≠0, n ≠ 0时
解:
算法如下
int AKM int m, int n if m 0 return n+1; if m 0 n 0 return AKM m-1, 1 ; if m 0 n 0 return AKM m-1, AKM m, n-1 ; 2. 设结点结构为 data,link ,试用一个全局指针p和某种链接结构实现一个队列,给出入队addq和出队deleteq过程,要求它们的时间复杂性都是O l
[题目分析]本题要求用链接结构实现一个队列,我们可用链表结构来实现。一般说,由于队列的先进先出性质,所以队列常设队头指针和队尾指针。但题目中仅给出一个“全局指针p”,且要求入队和出队操作的时间复杂性是O(1),因此我们用只设尾指针的循环链表来实现队列。
Void addq linklist p , elemtp x //p是数据域为data、链域为link的用循环链表表示的队列的尾指针,本算法是入队操作。
new s ; //申请新结点。假设有内存空间,否则系统给出出错信息。
s- data x; s- link: p- link;//将s结点
文档评论(0)