数据结构 栈和队列 算法设计题
来源:互联网 发布:youtube软件翻墙版 编辑:程序博客网 时间:2024/06/01 07:58
五 算法设计题
1. 设有两个栈S1,S2都采用顺序栈方式,并且共享一个存储区[O..maxsize-1],为了尽量利用空间,减少溢出的可能,可采用栈顶相向,迎面增长的存储方式。试设计S1,S2有关入栈和出栈的操作算法。
【哈尔滨工业大学 2001 七 (12分)】
2. 设从键盘输入一整数的序列:a1, a2, a3,…,an,试编写算法实现:用栈结构存储输入的整数,当ai≠-1时,将ai进栈;当ai=-1时,输出栈顶整数并出栈。算法应对异常情况(入栈满等)给出相应的信息。
【南京航空航天大学 1998 六 (10分)】
3. 设表达式以字符形式已存入数组E[n]中,‘#’为表达式的结束符,试写出判断表达式中括号(‘(’和‘)’)是否配对的C语言描述算法:EXYX(E); (注:算法中可调用栈操作的基本算法。)
【北京科技大学 2001 九、1 (10分)】
4. 从键盘上输入一个逆波兰表达式,用伪码写出其求值程序。规定:逆波兰表达式的长度不超过一行,以$符作为输入结束,操作数之间用空格分隔,操作符只可能有+、-、*、/四种运算。例如:234 34+2*$
【山东师范大学 1999 七 (10分)】
5. 假设以I和O分别表示入栈和出栈操作。栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序列。
(1)下面所示的序列中哪些是合法的?
A. IOIIOIOO B. IOOIOIIO C. IIIOIOIO D. IIIOOIOO
(2)通过对(1)的分析,写出一个算法,判定所给的操作序列是否合法。若合法,返回true,否则返回false(假定被判定的操作序列已存入一维数组中)。【武汉大学 2000 五、2】
6.设计一个算法,判断一个算术表达式中的括号是否配对。算术表达式保存在带头结点的单循环链表中,每个结点有两个域:ch和link,其中ch域为字符类型。【南京邮电大学 2000五】
7. 请利用两个栈S1和S2来模拟一个队列。已知栈的三个运算定义如下:PUSH(ST,x):元素x入ST栈;POP(ST,x):ST栈顶元素出栈,赋给变量x;Sempty(ST):判ST栈是否为空。那么如何利用栈的运算来实现该队列的三个运算:enqueue:插入一个元素入队列; dequeue:删除一个元素出队列;queue_empty:判队列为空。(请写明算法的思想及必要的注释)
【西安电子科技大学2001软件五(10分)】【上海交通大学1999 二(12分)】【河海大学1998 三(12分)】
类似本题的另外叙述有:
(1)有两个长度相同的栈S1,S2,已知以下入栈、出栈、判栈满和判栈空操作:
PROCEDURE push(Stack:Stacktype;x:Datatype);
FUNCTION Pop(Stack:Stacktype ):Datatype;
FUNCTION Full (Stack:Stacktype):Boolean;
FUNCTION Empty(Stack:Stacktype)Boolean;
现用此二栈构成一个队列,试写出下面入队列、出队列操作算法:
PROCEDURE EnQueue(x:Datatype);
FUNCTION DeQueue: Datatype;【北京邮电大学 2000 六(10分)】
8. 设结点结构为(data,link),试用一个全局指针p和某种链接结构实现一个队列,画出示意图,并给出入队addq和出队deleteq过程,要求它们的时间复杂性都是O(l)(不计new和dispose时间)
【东南大学 1996 二 (10分)】
9. 假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾结点,但不设头指针,如图所示(编者略),请写出相应的入队列和出队列算法。【西安电子科技大学 1999计应用 六 (10分)】
10. 如果允许在循环队列的两端都可以进行插入和删除操作。要求:
(1)写出循环队列的类型定义;
(2)写出“从队尾删除”和“从队头插入”的算法。【北方交通大学 1994 三 (12分)】
11. 在一个循环链队中只有尾指针(记为rear,结点结构为数据域data,指针域next),请给出这种队列的入队和出队操作的实现过程。【山东科技大学 2002 一、2 (6分)】
12. 双端队列(duque)是一个可以在任一端进行插入和删除的线性表。现采用一个一维数组作为双端队列的数据存储结构,使用类PASCAL语言描述如下:
CONST maxsize=32; {数组中可容纳的元素个数}
TYPE duque=RECORD
elem: ARRAY[0..MAXSIZE-1] OF datatype; {环形队列的存放数组}
end1,end2:0..MAXSIZE; {环形数组的两端}
END;
试编写两个算法add(Qu:duque;x:datatype;tag:0..1)和delete(Qu:duque; var x:datatype; tag:0..1)用以在此双端队列的任一端进行插入和删除。当tag=0时在左端endl端操作,当tag=1时在右端end2端操作。【清华大学 1998 二(10分)】
13. 一个双端队列deque是限定在两端end1,end2都可进行插入和删除的线性表。队空条件是end1=end2。若用顺序方式来组织双端队列,试根据下列要求,定义双端队列的结构,并给出在指定端i(i=1,2)的插入enq和删除deq操作的实现。
(1) 当队满时,最多只能有一个元素空间可以是空的。
(2) 在做两端的插入和删除时,队列中其它元素一律不动。【清华大学 1999 六(12分)】
14. 已知Q是一个非空队列,S是一个空栈。仅用队列和栈的ADT函数和少量工作变量,使用Pascal或C语言编写一个算法,将队列Q中的所有元素逆置。栈的ADT函数有:
makeEmpty(s:stack); 置空栈
push(s:stack;value:datatype); 新元素value进栈
pop(s:stack):datatype; 出栈,返回栈顶值
isEmpty(s:stack):Boolean; 判栈空否
队列的 ADT函数有:
enqueue(q:queue:value:datatype); 元素value进队
deQueue(q:queue):datatype; 出队列,返回队头值
isEmpty(q:queue):boolean; 判队列空否 【清华大学 2000 六(12分)】
15. 将n个队列顺序映射到数组v[l..m]中,每一队列在v中表示为一循环队列。试画出其示意图并写出对应这种表示的addq和deleteq过程。【东南大学 1993 二(20分)】
16. 设整数序列a1,a2,…,an,给出求解最大值的递归程序。【南京航空航天大学 2000 六】
17.线性表中元素存放在向量A(1,…,n)中,元素是整型数。试写出递归算法求出A中的最大和最小元素。【北京邮电大学 1994 八 (10分)】
18. 已知求两个正整数m与n的最大公因子的过程用自然语言可以表述为反复执行如下动作:第一步:若n等于零,则返回m;第二步:若m小于n,则m与n相互交换;否则,保存m,然后将n送m,将保存的m除以n的余数送n。
(1)将上述过程用递归函数表达出来(设求x除以y的余数可以用x MOD y 形式表示)。
(2)写出求解该递归函数的非递归算法。【北京航空航天大学 2001 五(15分)】
19. 写出和下列递归过程等价的非递归过程。
PROCEDURE test(VAR sum:integer);
VAR a:integer,
BEGIN
read(a);
IF a=0 THEN sum:=1
ELSE BEGIN test(sum); sum:=sum*a;END;
write(sum);
END; 【清华大学 1996 二】
20. 试将下列递归过程改写为非递归过程。
void test(int &sum)
{ int x;
scanf(x);
if(x=0) sum=0 else {test(sum); sum+=x;}
printf(sum);
} 【北京轻工业学院 2000 三 (15分)】
21. 已知Ackermann函数定义如下:
(1) 写出Ack(2,1)的计算过程。
(2) 写出计算Ack(m,n)的非递归算法。 【北京航空航天大学 1999 六 (15分)】
22.设计算法以求解从集合{1..n}中选取k(k<=n)个元素的所有组合。例如,从集合{1..4}中选取2个元素的所有组合的输出结果为:1 2,1 3,1 4,2 3, 2 4,3 4。
【合肥工业大学 2000 五、5(8分)】
- 数据结构 栈和队列 算法设计题
- 浙江中医药大学-《数据结构》-栈和队列算法设计
- 算法设计题3.15-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.16-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.17-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.18-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.19-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.20-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.21-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.22-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.23-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.24-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.27-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.28-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.29-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.25-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.26-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 算法设计题3.30 && 3.32-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
- 13周任务er
- strcpy用法
- android和iOS平台的崩溃捕获和收集
- ubuntu下安装与卸载软件方法
- myeclipse maven 出错(1)
- 数据结构 栈和队列 算法设计题
- 日志营销
- 使用apmserv 5.2.6 修改数据库phpmyadmin的root密码的方法
- 导出数据库表中数据的SQL语句
- java管道通信
- Houdini中如何创建Spare参数
- 中国顶级CEO经典语录
- 解决用gdb调试跟踪wine时无法跟入wine_init的问题
- Sailfish OS 是Meego系统的重生吗?