数据结构习题
⑷ 设A和B是稀疏矩阵,都以三元组作为存储结构, 请写出矩阵相加的算法,其结果存放在三元组表C中, 并分析时间复杂度。
⑸ 设有稀疏矩阵B如下图所示,请画出该稀疏矩阵 的三元组表和十字链表存储结构。
03000000 00000000 -3 0 0 0 0 0 0 4
A= 0 0 2 0 0 2 0 0
算法与数据结构
教材:《数据结构(C语言版)》。严蔚敏,吴伟民 编
著。清华大学出版社。
参考文献:
1 《数据结构》 。张选平,雷咏梅 编, 严蔚敏 审。 机械工业出版社。
2 《数据结构与算法分析》。Clifford A. Shaffer著, 张 铭,刘晓丹 译。电子工业出版社。
3 《数据结构习题与解析(C语实言版)》。李春葆。 清华大学出版社。
4 《数据结构与算法》。夏克俭 编著。国防工业出 版社。
习题一
1 简要回答术语:数据,数据元素,数据结构,数据 类型。
2 数据的逻辑结构?数据的物理结构?逻辑结构与物 理结构的区别和联系是什么?
3 数据结构的主要运算包括哪些? 4 算法分析的目的是什么?算法分析的主要方面是什 么?
5 分析以下程序段的时间复杂度,请说明分析的理由 或原因。
6 写一求单链表的结点数目ListLength(L)的算法。
7 写一算法将单链表中值重复的结点删除,使所得的 结果链表中所有结点的值均不相同。
8 写一算法从一给定的向量A删除值在x到y(x≤y)之 间的所有元素(注意:x和y是给定的参数,可以和表中 的元素相同,也可以不同)。
9 设A和B是两个按元素值递增有序的单链表,写一 算法将A和B归并为按按元素值递减有序的单链表C,试 分析算法的时间复杂度。
0 18 0 0 0 0 0 0 00004050 0 0 -3 0 0 0 0 0
习题六
⑴ 假设在树中, 结点x是结点y的双亲时,用(x,y)来 表示树边。已知一棵树的树边集合为 { (e,i), (b,e), (b,d), (a,b), (g,j), (c,g), (c,f), (h,l), (c,h), (a,c) } ,用树型表示法 表示该树,并回答下列问题:
5 利用栈的基本操作,写一个返回栈S中结点个数的 算法int StackSize(SeqStack S) ,并说明S为何不作为指 针参数的算法?
6 一个双向栈S是在同一向量空间内实现的两个栈, 它们的栈底分别设在向量空间的两端。试为此双向栈设 计初始化InitStack(S) ,入栈Push(S,i,x),出栈Pop(S,i,x) 算法,其中i为0或1 ,用以表示栈号。
⑴
Sum1( int n ) { int p=1, sum=0, m ; for (m=1; m<=n; m++) { p*=m ; sum+=p ; } return (sum) ; }
⑶ 递归函数
fact( int n ) { if (n<=1) return(1) ; else return( n*fact(n-1)) ; }
① 哪个是根结点? 哪些是叶子结点? 哪个是g的双 亲? 哪些是g的祖先? 哪些是g的孩子? 那些是e的子 孙? 哪些是e的兄弟? 哪些是f的兄弟?
② b和n的层次各是多少? 树的深度是多少? 以结 点c为根的子树的深度是多少?
习题五
⑴ 什么是广义表?请简述广义表与线性表的区别? ⑵ 一个广义表是(a, (a, b), d, e, (a, (i, j), k)) ,请画出 该广义表的链式存储结构。 ⑶ 设有二维数组a[6][8],每个元素占相邻的4个字 节,存储器按字节编址,已知a的起始地址是1000,试 计算: ① 数组a的最后一个元素a[5][7]起始地址; ② 按行序优先时,元素a[4][6]起始地址; ③ 按行序优先时,元素a[4][6]起始地址。
d, e, b, g, h入队 d, e出队 i , j , k , l , m入队 b出队 n, o, p, q, r入队
习题四
⑴ 解释下列每对术语的区别:空串和空白串;主串 和子串;目标串和模式串。
⑵ 若x和y是两个采用顺序结构存储的串,写一算法 比较这两个字符串是否相等。
⑶ 写一算法void StrRelace(char *T, char *P, char *S), 将T中第一次出现的与P相等的子串替换为S,串S和P的 长度不一定相等,并分析时间复杂度。
习题三
1 设有一个栈,元素进栈的次序为a, b, c。问经过栈 操作后可以得到哪些输出序列?
2 循环队列的优点是什么?如何判断它的空和满?
3 设有一个静态顺序队列,向量大小为MAX,判断 队列为空的条件是什么?队列满的条件是什么?
4 设有一个静态循环队列,向量大小为MAX,判断 队列为空的条件是什么?队列满的条件是什么?
⑵
Sum2( int n ) { int sum=0, m, t ; for (m=1; m<=n; m++) { p=1 ; for (t=1; t<=m; t++) p*=t ; sum+=p ; } return (sum) ; }
习题二
1 简述下列术语:线性表,顺序表,链表。 2 何时选用顺序表,何时选用链表作为线性表的存 储结构合适?各自的主要优缺点是什么? 3 在顺序表中插入和删除一个结点平均需要移动多 少个结点?具体的移动次数取决于哪两个因素? 4 链表所表示的元素是否有序?如有序,则有序性体 现于何处?链表所表示的元素是否一定要在物理上是相 邻的?有序表的有序性又如何理解? 5 设顺序表L是递增有序表,试写一算法,将x插入 到L中并使L仍是递增有序表。
7 设Q[0,6]是一个静态顺序队列,初始状态为 front=rear=0,请画出做完下列操作后队列的头尾指针 的状态变化情况,若不能入对,请指出其元素,并说明 理由。
a, b, c, d入队பைடு நூலகம்
a, b, c出队
i , j , k , l , m入队
d, i出队
n, o, p, q, r入队
8 假设Q[0,5]是一个循环队列,初始状态为 front=rear=0,请画出做完下列操作后队列的头尾指针 的状态变化情况,若不能入对,请指出其元素,并说明 理由。