《数据结构与算法 C语言版》—— 3.8习题

简介:

本节书摘来自华章出版社《数据结构与算法 C语言版》一 书中的第3章,第3.8节,作者:徐凤生,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.8习题

1名词解释:栈、队列、循环队列。
2如果输入序列为1,2,3,4,5,6,试问能否通过栈结构得到以下两个序列:4,3,5,6,1,2和1,3,5,4,2,6;请说明为什么不能得到或如何才能得到。
3试证明:若借助栈由输入序列1,2,…,n得到序列p1,p2,…,pn(它是输入序列的一个全排列),则在输出序列中不可能出现下列情况:存在i<j<k,使得pj4当函数f递归调用自身时,函数f内定义的局部变量在函数f的2次调用期间是否占用同一数据区?为什么?
5简要叙述循环队列的数据结构,并写出其初始状态、队列空、队列满时的队头指针和队尾指针的值。
6设有一个双端队列,元素进入该队列的次序为1,2,3,4,求既不能由输入受限的双端队列得到,又不能由输出受限的双端队列得到的输出序列。
7简述以下算法的功能。
(1)void algo1(Stack S){
int i,n,A[255];
n=0;
while(!StackEmpty(S)){n++;Pop(S,A[n]);};
for(i=1;i<=n;i++)Push(S,A[i]);
}
(2)void algo2(Stack S,int e){
Stack T;int d;
InitStack(T);
while(!StackEmpty(S)){Pop(S,d);if(d!=e)Push(T,d);}
while(!StackEmpty(T)){Pop(T,d);Push(S,d);}
}
(3)void algo3(Queue &Q){//栈和队列的元素类型均为int
Stack S;int d;
InitStack(T);
while(!QueueEmpty(Q)){DeQueue(Q,d);Push(S,d);}
while(!StackEmpty(S)){Pop(S,d);EnQueue(Q,d);}
}
8试写一个算法,识别依次读入的一个以@为结束符的字符序列是否为形如“序列1&序列2”模式的字符序列。其中,序列1和序列2中不含字符@,且序列2是序列1的逆序列。
9在火车调度站的入口处有n节硬席或软席车厢(分别以H和S表示)等待调度,试编写一个算法,输出对这n节车厢进行调度的操作(即入栈或出栈操作)序列,以使所有的软席车厢都被调整到硬席车厢之前。
10试写出求递归函数F(n)的递归算法,并消除递归。
F(n)=n+1n=0
n·F(n/2)n>0
11试将下列递归函数改为非递归函数:
void test(int ∑){
int x;
scanf("%d",&x);
if(x==0)sum=0;
else{test(sum);sum+=x;}
printf("sum=%d\\n",sum);
}
12设有整数列p1,p2,…,pn,给出求解其最大值的递归程序。
13假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点(注意不设头指针),试编写相应的队列初始化、入队和出队的算法。
14假设称正读和反读都相同的字符序列为“回文”,试编写一个算法判别读入的一个以@为结束符的字符序列是否是“回文”。
15编写一个算法,借助于栈将一个单链表逆序输出。
16假设循环队列中只设rear和length来分别指示队尾元素的位置和队中元素的个数,试给出此循环队列的队满条件,并写出相应的入队和出队算法,要求出队时需返回队头元素。

相关文章
|
4月前
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
115 1
|
1月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之顺序表习题精讲【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
顺序表的定义和基本操作之插入;删除;按值查找;按位查找习题精讲等具体详解步骤以及举例说明
TU^
|
6月前
|
存储 C语言
C语言习题~day35
C语言习题~day35
TU^
40 1
|
2月前
|
存储 Java
数据结构第三篇【链表的相关知识点一及在线OJ习题】
数据结构第三篇【链表的相关知识点一及在线OJ习题】
32 7
|
4月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
105 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
TU^
|
6月前
|
编译器 C语言
C语言习题~day31
C语言习题~day31
TU^
27 2
TU^
|
6月前
|
算法 程序员 C语言
C语言习题~day36
C语言习题~day36
TU^
44 1
TU^
|
6月前
|
存储 C语言
C语言习题~day34
C语言习题~day34
TU^
39 1
TU^
|
6月前
|
算法 C语言
C语言习题~day33
C语言习题~day33
TU^
31 1
TU^
|
6月前
|
C语言
C语言习题~day32
C语言习题~day32
TU^
19 1