数据结构 耿国华 西北大学 4-2堆串和块链串的存储实现

合集下载

数据结构课后习题答案(耿国华版

数据结构课后习题答案(耿国华版

第1章绪论2 、(1)×(2)×(3) √3 、(1)A(2)C(3)C5、f or计(算i=下1n程;序中 1 得语句频度for(j=1;j<=i; j++)for(k=1;k<=j;k ++)x=x+1;【解答】 x=x+1 得语句频度为:T(n)=1+(1+2)+(1+2+3)+. …+(1+2+……+n)=n(n+1)(n+2)/66 、编写算法,求一元多项式p。

(x)=a。

+a,x+a₂X2+……、+a Xn得值p(x) 并确定算法中每一语句得执行次数与整个算法得时间复杂度,要求时间复杂度尽可能小,规定算法中不能使用求幂函数.注意:本题中得输入为a,(i=01,…n)、x 与n,输出为P。

(x)。

算法得输入与输出采用下列方法(1)通过参数表中得参数显式传递(2)通过全局变量隐式传递。

讨论两种方法得优缺点,并在算法中以您认为较好得一种实现输入输出.【解答】(1)通过参数表中得参数显式传递优点:当没有调用函数时,不占用内存,调用结束后形参被释放,实参维持,函数通用性强,移置性强。

缺点:形参须与实参对应,且返回值数量有限。

(2)通过全局变量隐式传递优点:减少实参预形参得个数,从而减少内存空间以及传递数据时得时间消耗缺点:函数通用性降低,移植性差算法如下:通过全局变量隐式传递参数PolyValue({ int,in;floatx,a[]p;pri n tf(hn=”);s c anf(“%f,”&n);printf(“x=”;)sca nf(“%f&x);f or(i=0;i<n; i++)s c anf(%f ,&a[i]; /*执行次数:n 次 */p=a[0];for (i=1;i<=n;i++){ p=p+a [i]*x; /*执行次数:n次*/x= x*x;}prin t f(%f” p);}算法得时间复杂度:T(n)=0(n)通过参数表中得参数显式传递f loat PolyVa lue(float a[ ], float x, i nt n)f 1 oat p, s;int;is p a X0];for(=1;i<= n;i++)/执行次数:n 次*/{s=s+a [i]* p;p=p*x;}re turn(p);算法得时间复杂度:T(n)=O(n)第2章线性表习题1、填空:(1)在顺序表中插入或者删除一个元素,需要平均挪移一半元素,具体挪移得元素个数与插入或者删除得位置有关。

数据结构c语言版耿国华课后习题答案

数据结构c语言版耿国华课后习题答案

数据结构c语言版耿国华课后习题答案数据结构是计算机科学中非常重要的一门课程,它涉及到了计算机程序设计中的数据组织、存储和操作等方面。

而耿国华教授的《数据结构c语言版》是这门课程中的经典教材之一,它通过讲解各种数据结构的原理和实现方法,帮助学生更好地理解和掌握这门课程的知识。

本文将针对《数据结构c语言版》中的一些典型习题进行解答,帮助读者更好地理解和掌握这些知识点。

1. 线性表线性表是数据结构中最基本的一种数据结构,它包含了顺序表和链表两种实现方式。

在习题中,我们需要实现线性表的基本操作,如插入、删除、查找等。

通过编写代码,我们可以更好地理解这些操作的实现原理和思路。

2. 栈和队列栈和队列是线性表的特殊形式,它们分别具有“先进后出”和“先进先出”的特点。

在习题中,我们需要实现栈和队列的基本操作,如入栈、出栈、入队、出队等。

通过编写代码,我们可以更好地理解这些操作的实现方法和应用场景。

3. 树和二叉树树是一种非线性的数据结构,它具有层次关系。

二叉树是树的一种特殊形式,它每个节点最多只有两个子节点。

在习题中,我们需要实现树和二叉树的基本操作,如创建、插入、删除、遍历等。

通过编写代码,我们可以更好地理解这些操作的实现原理和应用场景。

4. 图图是一种非线性的数据结构,它由节点和边组成。

在习题中,我们需要实现图的基本操作,如创建、插入、删除、遍历等。

通过编写代码,我们可以更好地理解这些操作的实现方法和应用场景。

5. 查找和排序查找和排序是数据结构中非常重要的一部分,它们在实际应用中具有广泛的应用。

在习题中,我们需要实现各种查找和排序算法,如顺序查找、二分查找、冒泡排序、快速排序等。

通过编写代码,我们可以更好地理解这些算法的实现原理和性能特点。

通过以上习题的解答,我们可以更好地理解和掌握《数据结构c语言版》中的知识点。

同时,通过编写代码,我们可以锻炼自己的编程能力和解决问题的能力。

希望读者能够通过习题的解答,更好地理解和应用数据结构这门课程的知识。

数据结构C语言描述(耿国华)第4章

数据结构C语言描述(耿国华)第4章
第4章 串
第4章 串
4.1 4.2 抽象数据类型串的实现 4.3 串的应用举例:文本编辑
第4章 串
4.1 串的定义
串(String)是零个或多个字符组成的有限序列。 一般记为: S=′a1a2...an′ (n≥0)
其中S是串的名字, 用单引号括起来的字符序列是串的值, ai(1≤i≤n)可以是字母、数字或其它字符。n是串中字符的个数, 称为串的长度,n=0时的串称为空串 (Null String)。
第4章 串
【算法4.3 串复制函数】
(4) StrEmpty(s) /* 若串s为空(即串长为0), 则返回1, 否则返回0 */ SString s; { if (s.len==0) return(1); else return(0); }
第4章 串
【算法4.4 判空函数】
(5) 串比较函数。 StrCompare(s, t) /* 若串s和t相等, 则返回0;若s>t,则返回1;若s<t,则返
第4章 串 (2) StrInsert(S, pos, T) 初始条件: 串S存在, 1≤pos≤StrLength(S)-len+1 操作结果: 在串S的第pos个字符之前插入串T (3) StrDelete(S, pos, len) 初始条件: 串S存在, 1≤pos≤StrLength(S)-len+1 操作结果: 从串S中删除第pos个字符起长度为len (4) StrCopy(S, T) 初始条件: 串S 操作结果: 由串T复制得串S。
(6) StrLength(s)/* 返回串s的长度 */ SString s; { return(s.len); }
第4章 串
【算法4.6 求串长函数】

数据结构答案(耿国华)

数据结构答案(耿国华)
数 据 结 构
SubString(sub2,s,7,1)= 空格
StrIndex(s,’A’,4)= 6 StrReplace(s,’STUDENT’,q)= I AM A WORKER
StrCat(StrCat(sub1,t),StrCat(sub2,q)) = I AM A GOOD WORKER
B
C A
先:ABC 中:CBA 后:CBA
A
B C
先:ABC 中:BAC 后:BCA
6
A
先:ABC B 中:ACB 后:CBA
B C
C
先:ABC 中:ABC 后:CBA
第6章 树和二叉树习题
3.已知一棵度为k的树中有n1个度为1的结点,n2个度 为2的结点,…nk个度为k的结点,则该树中有多少个 叶子结点,并证明之。
3)前序和后序相同 空树、只有一个结点的树
9
第6章 树和二叉树习题
数 据 结 构
补充:写出下面二叉树的前序、中序、后序 遍历序列 先序序列: A ABCDEFGHIJ E B 中序序列: G C F BCDAFEHJIG D H I J 后序序列: DCBFJIHGEA
10
第6章 树和二叉树习题
13
解:设n为总结点数,则有
数 据 结 构
(总结点数) n=n0+n1+n2+…nk (总边数) n-1=1*n1+2*n2+…k*nk 两式相减得:1=n0-n2-2n3-…-(k-1)nk n0=1+n2+2n3+…+(k-1)nk =1+∑(i-1)ni
i=1
7
k
第6章 树和二叉树习题
4.假设一棵二叉树的先序序列和中序序列,试画出该二叉树, 并写出后序遍历序列。

《数据结构——C语言描述》习题及答案 耿国华 2

《数据结构——C语言描述》习题及答案 耿国华 2

第1章绪论习题一、问答题1. 什么是数据结构?2. 四类基本数据结构的名称与含义。

3. 算法的定义与特性。

4. 算法的时间复杂度。

5. 数据类型的概念。

6. 线性结构与非线性结构的差别。

7. 面向对象程序设计语言的特点。

8. 在面向对象程序设计中,类的作用是什么?9. 参数传递的主要方式及特点。

10. 抽象数据类型的概念。

二、判断题1. 线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。

2. 算法就是程序。

3. 在高级语言(如C、或PASCAL)中,指针类型是原子类型。

三、计算下列程序段中X=X+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;[提示]:i=1时:1 = (1+1)×1/2 = (1+12)/2i=2时:1+2 = (1+2)×2/2 = (2+22)/2i=3时:1+2+3 = (1+3)×3/2 = (3+32)/2…i=n时:1+2+3+……+n = (1+n)×n/2 = (n+n2)/2f(n) = [ (1+2+3+……+n) + (12 + 22 + 32 + …… + n2 ) ] / 2 =[ (1+n)n/2 + n(n+1)(2n+1)/6 ] / 2=n(n+1)(n+2)/6=n3/6+n2/2+n/3区分语句频度和算法复杂度:O(f(n)) = O(n3)四、试编写算法求一元多项式Pn(x)=a0+a1x+a2x2+a3x3+…a n x n的值P n(x0),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能的小,规定算法中不能使用求幂函数。

注意:本题中的输入a i(i=0,1,…,n), x和n,输出为P n(x0).通常算法的输入和输出可采用下列两种方式之一:(1)通过参数表中的参数显式传递;(2)通过全局变量隐式传递。

数据结构 耿国华 西北大学 4-4总结与提高

数据结构 耿国华 西北大学 4-4总结与提高

西北大学 《数据结构》例题要求编写一个用带头结点的单链表实现串的模式匹配算法,每个结点存放1个字符(结点大小为1)。

借助于前面的结点大小为1定义链串类型LKString。

【问题分析】该算法类同顺序串的简单模式匹配,实现匹配过程序需考虑链表的特征(从头比较的技术,指针保留的技术)。

[算法思想]:从主串s 的第1个字符和模式串t 的第一个字符开始比较,如果相等,就继续比较后续字符,如果不等,则从主串s 的下一个字符开始重新和模式串t 比较。

一直到模式串t 中的每一个字符依次和主串s 中的对应字符相等,则匹配成功,返回主串的当前起始位置指针。

如果主串中没有和模式串相同的子串,则称匹配不成功,返回空指针NULL。

[算法描述]:Link *StrIndex(LKString *s, LKString *t)/* 求模式串t 在主串s 中第一次出现的位置指针 */{Link *sp, *tp, *start;if (t->len == 0) return s->head->next; /* 空串是任意串的子串 */start = s->head->next; /* 记录主串的起始比较位置 */sp = start; /* 主串从start 开始 */tp = t->head->next; /* 模式串从第一个结点开始 */while(sp != NULL && tp != NULL){if (sp->ch == tp->ch) /* 若当前对应字符相同,则继续比较 */例题第四章 串课外作业{sp = sp->next;tp = tp->next;}else/* 发现失配字符,则返回到主串当前起始位置的下一个结点继续比较*/ {start = start->next; /* 更新主串的起始位置 */sp = start;tp = t->head->next; /* 模式串从第一个结点重新开始 * /}}if ( tp == NULL) return start;/* 匹配成功,返回主串当前起始位置指针 */else return NULL; /* 匹配不成功,返回空指针 */}【链串的模式匹配算法】。

《数据结构——C语言描述》习题及答案-耿国华

《数据结构——C语言描述》习题及答案-耿国华

第1章绪论习题一、问答题1. 什么是数据结构?2. 四类基本数据结构的名称与含义。

3. 算法的定义与特性。

4. 算法的时间复杂度。

5. 数据类型的概念。

6. 线性结构与非线性结构的差别。

7. 面向对象程序设计语言的特点。

8. 在面向对象程序设计中,类的作用是什么?9. 参数传递的主要方式及特点。

10. 抽象数据类型的概念。

二、判断题1. 线性结构只能用顺序结构来存放,非线性结构只能用非顺序结构来存放。

2. 算法就是程序。

3. 在高级语言(如C、或PASCAL)中,指针类型是原子类型。

三、计算下列程序段中X=X+1的语句频度for(i=1;i<=n;i++)for(j=1;j<=i;j++)for(k=1;k<=j;k++)x=x+1;[提示]:i=1时:1 = (1+1)×1/2 = (1+12)/2i=2时:1+2 = (1+2)×2/2 = (2+22)/2i=3时:1+2+3 = (1+3)×3/2 = (3+32)/2…i=n时:1+2+3+……+n = (1+n)×n/2 = (n+n2)/2f(n) = [ (1+2+3+……+n) + (12 + 22 + 32 + …… + n2 ) ] / 2=[ (1+n)n/2 + n(n+1)(2n+1)/6 ] / 2=n(n+1)(n+2)/6=n3/6+n2/2+n/3区分语句频度和算法复杂度:O(f(n)) = O(n3)四、试编写算法求一元多项式Pn(x)=a0+a1x+a2x2+a3x3+…a n x n的值P n(x0),并确定算法中的每一语句的执行次数和整个算法的时间复杂度,要求时间复杂度尽可能的小,规定算法中不能使用求幂函数。

注意:本题中的输入a i(i=0,1,…,n), x和n,输出为P n(x0).通常算法的输入和输出可采用下列两种方式之一:(1)通过参数表中的参数显式传递;(2)通过全局变量隐式传递。

数据结构 耿国华 西北大学 4-1串的基本概念和顺序串的存储与运算

数据结构 耿国华 西北大学 4-1串的基本概念和顺序串的存储与运算
且0≤len≤Length(S)- pos +1。 操作结果:用Sub返回串 S 的第 pos 个字符
起长度为 len 的子串。
例如: SubString (sub1, commander , 4,s3u)b1= man
SubString (sub2, commander , 4, 7)
sub2= ?
S = chater 5
3/26/2020
第4章 串 4.1 串的定义 基本操作:(4)StrCopy (S, T)
StrCopy (S, T) 初始条件:串S存在。 操作结果:由串T复制得串S
6
3/26/2020
第4章 串 4.1 串的定义 基本操作:(5)StrEmpty (S)
StrEmpty (S) 初始条件:串S存在。 操作结果:若串S为空串,则返回TRUE,否则返回
StrLength(S) 初始条件:串S已存在。 操作结果:返回串S的长度,即串S中的元素个数
9
3/26/2020
第4章 串 4.1 串的定义 基本操作:(8)StrClear (S)
StrClear (S) 初始条件:串S已存在。 操作结果:将S清为空串
10
3/26/2020
第4章 串 4.1 串的定义 基本操作: (9)StrCat(S,T)
StrReplace (S, T, V) 初始条件:串S, T和 V 均已存在,且 T 是非空串。 操作结果:用V替换主串S中出现的所有与(模式
串)T相等的不重叠的子串。
例如: S = abcaabcaaabca , T = bca , V = x S = axaxaax 14
3/26/2020
第4章 串 4.1 串的定义 基本操作:(13)StrDestroy (S)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if (t.len==0) return(0); /* 模式串为空串时,是任意串的匹配串 */ start=pos; i=start; j=0; /* 主串从 pos 开始,模式串从头(0)开始 */ while (i<s.len && j<t.len)
if (s.ch[i]==t.ch[j]) {i++; j++;} /* 当前对应字符相等时推进 */ else { start++; /* 当前对应字符不等时回溯 */
国家精品课程 西北大学《数据结构》
-1-
例题
西北大学 《数据结构》
例 4.1.图 4.1 给出了一 个匹配过程的 例子,其中方 框对应的字
符为失配字符:
第 1 次匹配: 第 2 次匹配:
第 3 次匹配:
第 4 次匹配:
Start ↓i=2
主串 S ↓a b a b c a b c a c b a b
i=start; j=0; /* 主串从 start+1 开始,模式串从头(0)开始*/ } if (j>=t.len) return(start); /* 匹配成功时,返回匹配起始位置 */ else return(-1); /* 匹配不成功时,返回-1 */ } 【算法 4.10 顺序串的简单模式匹配(定位)函数】 【 算法分析】 该模式匹配算法比较思路简单,但最坏时间复杂度较高为 O(s.len*t.len),如主 串为 51 个 0,模式串为 7 个 0 后有个 1,每趟都在最后一个不匹配后而倒到 start+1,整个匹配过程共需 s.len- t.len=45 趟,每趟比较 t.len=8 个字符,故此例 整个比较了 360 次。这个算法的主要时间耗费在失配后的比较位置有回溯,造成 了比较次数太多的情况。为降低时间复杂度可采用无回溯的算法,具体参见 4.3 节。
子S串tartT

↓i=2
abcac
↑j=2

ababcabcacbab
a b ca c
↑j=0
Start
↓ ↓i=6
ababcabcacbab
abca c
↑j=4
Start ↓
↓i=3
ababcabcacbab
a bcac
↑j=0
第 5 次匹配:
例题
第四章 串
Start ↓
↓i=4
ababcabcacbab
a bcac
↑j=0
第 6 次匹配:
-1-
Start
↓i=4

a b a b c a bc ac b a b
a b c a c□□
↑j=5
课外作业
图 4.1 顺序串的基本匹配过程
StrIndex(SString s,int pos, SString t) /*求从主串 s 的下标 pos 起,串 t 第一次出现的位置,成功返回位置序号,不成 功返回-1*/ { int i, j, start;
相关文档
最新文档