数据结构,清华大学出版社,严蔚敏吴伟民编著

合集下载

清华大学计算机系列教材.

清华大学计算机系列教材.

数据的结构的表示:
顺序存储结构
链式存储结构 顺序映象——是借助元素在存储器中的相对位置来表示数据元素之 间的逻辑关系。 非顺序映象——是借助指针表示数据元素之间的逻辑关系。 例子:表示复数z1=3.0-2.3i和z2=-0.7+4.8i … … 0415 -2.3 0300 3.0 -2.3 0302 … … 0632 -0.7 3.0 0611 4.8 0634 0613 0415 … …
/ mod
18
逻辑结构的描述——二元组(D,S) 数据结构
(存储结构+操作)的描述——高级语言中的“数据类型
定义 抽象数据 类型ADT 表示 实现
——三元组(D,S,P)
19
抽象数据类型的形式定义-----三元组: (D,S,P) D – 数据对象; S – D上的关系; P – 对D的基本操作集;
24
IsDescending(T) 初始条件: 三元组T已经存在。 操作结果: 如果三元组T的三个元素按降序排列,则 返回TRUE; 否则返回FALSE。 Max(T,&e) 初始条件: 三元组T已经存在,。 操作结果: 用e返回三元组T的最大值。 Min(T,&e) 初始条件: 三元组T已经存在,。 操作结果: 用e返回三元组T的最小值。
S01 L01 S01 S02 …
001,… 003,…
… … … … … L
S …
高等数学 001,003,… 理论力学 002,…
002,…
001,003,…
线性代数 004,…

栾汝书 004,…
计算机处理的对象之间存在着一种简单的线性关系,称为线性 7 数据结构。
例子2:计算机和人对奕问题。 × × × × × ×

计算机考研推荐书目

计算机考研推荐书目

计算机考研推荐书目计算机考研推荐书目【一】数据结构《数据结构(C语言版)》严蔚敏、吴伟民编著清华大学出版社《数据结构题集(C语言版)》严蔚敏、吴伟民编著清华大学出版社《算法与数据结构考研试题精析》陈守孔、胡潇琨编著机械工业出版社组成原理《计算机组成原理》唐朔飞主编高等教育出版社《计算机组成原理学习指导与习题解答》唐朔飞主编高等教育出版社《计算机组成原理解题指南》白中英主编科学出版社操作系统《计算机操作系统》汤小丹主编西安电子科技大学《计算机操作系统学习指导与题解》汤小丹主编西安电子科技大学计算机网络《计算机网络》谢希仁电子工业出版社《计算机网络知识要点与习题解析》王慧强主编哈尔滨工程大学出版社《计算机网络考研指导》黄传河主编机械工业出版社计算机考研推荐书目【二】1、“数据结构”复习思路:数据结构的复习应以“线性结构树型结构图型结构查找表排序算法”为主线进行复习,重点在“线性结构”、“图”和“排序”三个部分,“线性结构”、“树”和“图”侧重基础概念、基础原理和基础方法的掌握,“图”、“查找”和“排序”则侧重具体应用的考核。

2、“计算机组成原理”复习思路:计算机组成原理按照冯诺伊曼计算机5部分组成结构为大块进行复习。

“计算机系统概述”和“数的表示和运算”重点在于基本概念的掌握,没有具体应用。

而“存储器的层次结构”,“指令系统”,“中央处理器”,“总线”和“输入输出系统”部分除了掌握基本原理,基本方法外,重点掌握应用。

3、“操作系统”复习思路:操作系统按照操作系统的基本功能为主线进行复习,即“进程管理”,“内存管理”,“文件管理”和“输入输出管理”。

其中重点部分在“进程管理”和“内存管理”。

4、“计算机网络”复习思路:计算机网络按照OSI网络参考模型的层次结构为顺序进行复习,复习重点在于“数据链路层”,“网络层”,“传输层”和“应用层”。

数据结构(c语言版)课件 第一章 绪论 (严蔚敏、吴伟民编 清华大学出版社)

数据结构(c语言版)课件 第一章 绪论 (严蔚敏、吴伟民编 清华大学出版社)

可进行的操作的总称
例 C语言中,提供int, char, float, double等基本 数据类型,数组、结构体、共用体、枚举 等构造数据类型,还有指针、空(void)类 型等。用户也可用typedef 自己定义数据类型 typedef struct { int num; char name[20]; float score; }STUDENT; STUDENT stu1,stu2, *p;
存储内容 元素1 元素4 …….. 元素2 ……..
指针 1400 ∧ ……. 1536 …….
1536
元素3
1346
数据结构的三个方面:
线性结构
数据的逻辑结构 非线性结构 数据的存储结构
线性表 栈 队 树形结构
图形结构
顺序存储
链式存储
数据的运算:检索、排序、插入、删除、修改等
数据类型—高级语言中指数据的取值范围及其上
数据的逻辑结构—只抽象反映数据元素的逻辑关系 数据的存储(物理)结构—数据的逻辑结构在计算
机存储器中的实现
存储结构分为: 顺序存储结构——借助元素在存储器中的相对位置来表示 数据元素间的逻辑关系 链式存储结构——借助指示元素存储地址的指针表示数据 元素间的逻辑关系 数据的逻辑结构与存储结构密切相关


……..
……..
…...
…...
…...
…...
多叉路口交通灯管理问题

C AB
AC
AD
B
D
BA
BC
BD
E
DA EA EB DB EC DC ED
A
数据结构定义: 是一门研究非数值计算的程序设
计问题中计算机的操作对象以及它们之间的关系 和操作等等的学科

数据结构,清华大学出版社,严蔚敏吴伟民编著

数据结构,清华大学出版社,严蔚敏吴伟民编著

第一章绪论1、数据结构是计算机中存储、组织数据的方式。

精心选择的数据结构可以带来最优效率的算法。

2、程序设计=算法+数据结构3、解决问题方法的效率:●●●4、5、6、7、8、9、数据结构是带结构的数据元素的集合。

10、不同的关系构成不同的结构。

11、次序关系:{<ai,ai+1>|i=1,2,3,4,5,6}12、对每种数据结构,主要讨论如下两方面的问题:1)数据的逻辑结构,数据结构的基本操作;2)数据的存储结构,数据结构基本操作的实现;13、数据的逻辑结构:数据之间的结构关系,是具体关系的抽象。

数据结构的基本操作:14、1516171819、链接存储结构特点:●比顺序存储结构的存储密度小(每个节点都由数据域和指针域组成)。

●逻辑上相邻的节点物理上不必相邻。

●插入、删除灵活(不必移动节点,只要改变节点中的指针)。

20、数据类型是一个值的集合和定义在此集合上的一组操作的总称。

21、ADT有两个重要特征:数据抽象和数据封装。

22、抽象数据类型(AbstractDataType简称ADT):是指一个数学模型以及定义在此数学模型上的一组操作。

232424252627第二章线性表1、线性结构的特点:在数据元素中的非空有限集中。

(1)存在唯一的一个被称作“第一”的数据元素;(2)存在唯一的一个被称作“最后一个”的数据元素;(3)除第一个外,集合中的每一个数据元素均只有一个前驱;(4)除最后一个外,集合中的每一个数据元素均只有一个后继。

2、线性表(LinearList):一个线性表是n个数据元素的有限序列。

3、线性表的顺序存储实现:typedefstruct{ElementTypeData[MAXSIZE];4}5while(i<=PtrL->Last&&PtrL->Data[i]!=X)i++;if(i>PtrL->Last)return-1;/*如果没找到,返回-1*/ elsereturni;/*找到后返回的是存储位置*/}6、插入算法voidInsert(ElementTypeX,inti,List*PtrL){intj;if(PtrL->Last==MAXSIZE-1){/*表空间已满,不能插入*/ printf("表满");}}}7voidDelete(inti,List*PtrL){intj;if(i<1||i>PtrL->Last+1){/*检查空表及删除位置的合法性*/ printf(“不存在第%d个元素”,i);return;}for(j=i;j<=PtrL->Last;j++)PtrL->Data[j-1]=PtrL->Data[j];/*将ai+1~an顺序向前移动*/ PtrL->Last--;/*Last仍指向最后元素*/return;}8}}9(1List*FindKth(intK,List*PtrL){List*p=PtrL;inti=1;while(p!=NULL&&i<K){p=p->Next;i++;}if(i==K)returnp;/*找到第K个,返回指针*/elsereturnNULL;/*}(2{}10if(i==1){/*新结点插入在表头*/s=(List*)malloc(sizeof(List));/*申请、填装结点*/ s->Data=X;s->Next=PtrL;returns;/*返回新表头指针*/}p=FindKth(i-1,PtrL);/*查找第i-1个结点*/ if(p==NULL){/*第i-1个不存在,不能插入*/ printf("参数i错");returnNULL;}}11PtrL=PtrL->Next;/*从链表中删除*/free(s);/*释放被删除结点*/returnPtrL;}p=FindKth(i-1,PtrL);/*查找第i-1个结点*/if(p==NULL){printf(“第%d个结点不存在”,i-1);returnNULL;}elseif(p->Next==NULL){printf(“第%d个结点不存在”,i);returnNULL;}else{}}121314①单链表②双链表③单循环链表④顺序表第三章Chapter3栈(stacks)和队列(queues)1、栈是限定仅能在表尾一端进行插入、删除操作的线性表。

数据结构(C语言版)清华大学出版社 严蔚敏 吴伟民

数据结构(C语言版)清华大学出版社 严蔚敏 吴伟民

吉首大学题库一、一、单选题(每题 2 分,共20分)1. 1.对一个算法的评价,不包括如下()方面的内容。

A.健壮性和可读性B.并行性C.正确性D.时空复杂度2. 2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( )。

A. p->next=HL->next; HL->next=p;B. p->next=HL; HL=p;C. p->next=HL; p=HL;D. HL=p; p->next=HL;3. 3.对线性表,在下列哪种情况下应当采用链表表示?( )A.经常需要随机地存取元素B.经常需要进行插入和删除操作C.表中元素需要占据一片连续的存储空间D.表中元素的个数不变4. 4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是( )A. 2 3 1B. 3 2 1C. 3 1 2D. 1 2 35. 5.AOV网是一种()。

A.有向图B.无向图C.无向无环图D.有向无环图6. 6.采用开放定址法处理散列表的冲突时,其平均查找长度()。

A.低于链接法处理冲突 B. 高于链接法处理冲突C.与链接法处理冲突相同D.高于二分查找7.7.若需要利用形参直接访问实参时,应将形参变量说明为()参数。

A.值B.函数C.指针D.引用8.8.在稀疏矩阵的带行指针向量的链接存储中,每个单链表中的结点都具有相同的()。

A.行号B.列号C.元素值D.非零元素个数9.9.快速排序在最坏情况下的时间复杂度为()。

A.O(log2n) B.O(nlog2n) C.0(n) D.0(n2)10.10.从二叉搜索树中查找一个元素时,其时间复杂度大致为( )。

A. O(n)B. O(1)C. O(log2n)D. O(n2)二、二、运算题(每题 6 分,共24分)1. 1.数据结构是指数据及其相互之间的______________。

当结点之间存在M对N(M:N)的联系时,称这种结构为_____________________。

数据结构教材 出版社: 清华大学出版社 作者: 严蔚敏吴伟民 ISBN ...

数据结构教材 出版社: 清华大学出版社 作者: 严蔚敏吴伟民 ISBN ...

数据结构教材出版社:清华大学出版社作者:严蔚敏吴伟民ISBN :978-7-302-02368-5目录第1章绪论1.1 什么是数据结构1.2 基本概念和术语1.3 抽象数据类型的表现与实现1.4 算法和算法分析第2章线性表2.1 线性表的类型定义2.2 线性表的顺序表示和实现2.3 线性表的链式表示和实现2.4 一元多项式的表示及相加第3章栈和队列3.1 栈3.2 栈的应有和举例3.3 栈与递归的实现3.4 队列3.5 离散事件模拟第4章串4.1 串类型的定义4.2 串的表示和实现4.3 串的模式匹配算法4.4 串操作应用举例第5章数组和广义表5.1 数组的定义5.2 数组的顺序表现和实现5.3 矩阵的压缩存储5.4 广义表的定义5.5 广义表的储存结构5.6 m元多项式的表示5.7 广义表的递归算法第6章树和二叉树6.1 树的定义和基本术语6.2 二叉树6.2.1 二叉树的定义6.2.2 二叉树的性质6.2.3 二叉树的存储结构6.3 遍历二叉树和线索二叉树6.3.1 遍历二叉树6.3.2 线索二叉树6.4 树和森林6.4.1 树的存储结构6.4.2 森林与二叉树的转换6.4.3 树和森林的遍历6.5 树与等价问题6.6 赫夫曼树及其应用6.6.1 最优二叉树(赫夫曼树)6.6.2 赫夫曼编码6.7 回溯法与树的遍历6.8 树的计数第7章图7.1 图的定义和术语7.2 图的存储结构7.2.1 数组表示法7.2.2 邻接表7.2.3 十字链表7.2.4 邻接多重表7.3 图的遍历7.3.1 深度优先搜索7.3.2 广度优先搜索7.4 图的连通性问题7.4.1 无向图的连通分量和生成树7.4.2 有向图的强连通分量7.4.3 最小生成树7.4.4 关节点和重连通分量7.5 有向无环图及其应用7.5.1 拓扑排序7.5.2 关键路径7.6 最短路径7.6.1 从某个源点到其余各顶点的最短路径7.6.2 每一对顶点之间的最短路径第8章动态存储管理8.1 概述8.2 可利用空间表及分配方法8.3 边界标识法8.3.1 可利用空间表的结构8.3.2 分配算法8.3.3 回收算法8.4 伙伴系统8.4.1 可利用空间表的结构8.4.2 分配算法8.4.3 回收算法8.5 无用单元收集8.6 存储紧缩第9章查找9.1 静态查找表9.1.1 顺序表的查找9.1.2 有序表的查找9.1.3 静态树表的查找9.1.4 索引顺序表的查找9.2 动态查找表9.2.1 二叉排序树和平衡二叉树9.2.2 B树和B+树9.2.3 键树9.3 哈希表9.3.1 什么是哈希表9.3.2 哈希函数的构造方法9.3.3 处理冲突的方法9.3.4 哈希表的查找及其分析第10章内部排序10.1 概述10.2 插入排序10.2.1 直接插入排序10.2.2 其他插入排序10.2.3 希尔排序10.3 快速排序10.4 选择排序10.4.1 简单选择排序10.4.2 树形选择排序10.4.3 堆排序10.5 归并排序10.6 基数排序10.6.1 多关键字的排序10.6.2 链式基数排序10.7 各种内部排序方法的比较讨论第11章外部排序11.1 外存信息的存取11.2 外部排序的方法11.3 多路平衡归并的实现11.4 置换一选择排序11.5 最佳归并树第12章文件12.1 有关文件的基本概念12.2 顺序文件12.3 索引文件12.4 ISAM文件和VSAM文件12.4.1 ISAM文件12.4.2 VSAM文件12.5 直接存取文件(散列文件)12.6 多关键字文件12.6.1 多重表文件12.6.2 倒排文件附录A 名词索引附录B 函数索引参考书目。

计算机考研专硕院校信息汇总

计算机考研专硕院校信息汇总

计算机考研专硕院校信息汇总1.中山大学(985)广东省广州软件工程:867专业基础(数据结构)620)软件学院院系:100 本专:100 推免:60 专业:40621)(1)101思想政治理论(2)204英语二(3)302数学二(4)867专业基础(数据结构)复试专业课:F62 01计算机综合考试①《离散数学》,耿素云、屈婉玲,高等教育出版社,1998。

②《C程序设计》第二版,谭浩强编,清华大学出版社,1999。

计算机技术:(408)综合350)信息科学与技术学院院系:287 专硕:143 推免:100 一般:43 (470)中山大学-卡内基梅隆大学联合工程学院(922)数据结构与计算机原理本专:40分数线:300;270;2702.华南理工大学(985)广东省广州计算机技术:(831)计算机专业综合(数据结构、操作系统)008)计算机科学与工程学院院系:133 专业招生人数:55① 101思想政治理论② 204英语1③302数学1④831计算机专业综合(数据结构、操作系统) 复试笔试科目:902上机能力测试:数据库复试科目参考书:《数据库系统概论》(第三版)王能斌著,,电子工业出版社;《数据库系统概念》(第四版)中文版,杨冬青、唐世渭等编译,机械工业出版社;《数据库系统教程》王能斌著,电子工业出版社软件工程:(408)综合(023)软件学院院系:74推免:373.暨南大学(211)广东省软件工程和计算机技术:(830)数据结构(010)信息科学技术学院院系:110 推免:20 软件工程专业:10①101思想政治理论②204英语二③302数学二④830数据结构830数据结构1.严蔚敏、吴伟民, 数据结构(C语言版),清华大学出版社出版2.严蔚敏, 吴伟民,《数据结构习题解析》,清华大学出版社出版复试科目:C语言程序设计加试科目:①离散数学②计算机基础!!华南师范大学广东省软件工程:(918)计算机综合考试(操作系统、程序设计)(019)计算机学院院系:62 推免:164.华东师范大学(985)上海市085211 数据结构(含c语言)计算机技术1.上机考试:主要考查学生运用计算机编程解决问题的能力,上机语言为C或C++。

数据结构(c语言版)课件 第八章 排序 (严蔚敏、吴伟民编 清华大学出版社)

数据结构(c语言版)课件 第八章 排序 (严蔚敏、吴伟民编 清华大学出版社)

例 初始: 49 38 65 97 76 13 27 48 55 4 取d1=5 49 一趟分组: 38 65 97 76 13 27 48 55 4
一趟排序:13 27 48 55 4 取d2=3 13 二趟分组: 27 48 55 4
49 38 65 97 76 49 38 65 97 76
二趟排序:13 4 48 38 27 49 55 65 97 76 取d3=1 13 三趟分组: 27 48 55 4 49 38 65 97 76
k 38 j k 65 j 97 j 76 j
k 13 49 j 27 ] j k 97 j 97 [97 49 49 49 49 76 j 76 76 [76 65 65 65 49 38 ] 27 j 49 49 97 [97 76 76 j 38 ] 65 ] 65 ] 76 ] [97 ] 97
按排序所需工作量
简单的排序方法:T(n)=O(n) 先进的排序方法:T(n)=O(logn) 基数排序:T(n)=O(d.n)
排序基本操作
比较两个关键字大小 将记录从一个位置移动到另一个位置
8.1 插入排序
直接插入排序
排序过程:整个排序过程为n-1趟插入,即先将序列中 第1个记录看成是一个有序子序列,然后从第2个记录 开始,逐个进行插入,直至整个序列有序 算法描述
初始时令i=s,j=t 首先从j所指位置向前搜索第一个关键字小于x的记录,并和rp 交换 再从i所指位置起向后搜索,找到第一个关键字大于x的记录, 和rp交换 重复上述两步,直至i==j为止 再分别对两个子序列进行快速排序,直到每个子序列只含有 一个记录为止
x 例 初始关键字: 27 49 i 完成一趟排序: ( 27 38 i 38 13 49 65 i 13) 49 97 iij 76 j 97 49 13 j 97 65 49 27 j 65 50 j 50)
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一章绪论1、数据结构是计算机中存储、组织数据的方式。

精心选择的数据结构可以带来最优效率的算法。

2、程序设计= 算法+数据结构3、解决问题方法的效率:●跟数据的组织方式有关●跟空间的利用效率有关●跟算法的巧妙程度有关4、数据:所有能输入到计算机中,且被计算机处理的符号的集合,是计算机操作对象的总称;是计算机处理的信息的某种特定的符号表示形式。

5、数据元素:数据中的一个“个体”,数据结构中讨论的基本单位。

相当于“记录”,在计算机程序中通常作为一个整体考虑和处理。

6、数据项: 相当于记录的“域”, 是数据的不可分割的最小单位,如学号。

数据元素是数据项的集合。

7、数据对象:性质相同的数据元素的集合.例如: 所有运动员的记录集合8、数据结构:是相互间存在某种关系的数据元素集合。

9、数据结构是带结构的数据元素的集合。

10、不同的关系构成不同的结构。

11、次序关系:{<ai,ai+1>|i=1,2,3,4,5,6}12、对每种数据结构,主要讨论如下两方面的问题:1)数据的逻辑结构,数据结构的基本操作;2)数据的存储结构,数据结构基本操作的实现;13、数据的逻辑结构:数据之间的结构关系,是具体关系的抽象。

数据结构的基本操作:指对数据结构的加工处理。

14、数据的存储结构(物理结构):数据结构在计算机内存中的表示。

数据结构基本操作的实现:基本操作在计算机上的实现(方法)。

15、数据结构的有关概念16、数据元素的4类的基本结构:○1集合;○2线性结构:结构中数据元素之间存在一对一的关系;○3树形结构:结构中数据元素之间存在一对多的关系;○4图状结构或网状结构:结构中数据元素之间存在多对多的关系。

17、C语言的优点:C语言可以直接操作内存。

18、每个节点都由两部分组成:数据域和指针域。

19、链接存储结构特点:●比顺序存储结构的存储密度小(每个节点都由数据域和指针域组成)。

●逻辑上相邻的节点物理上不必相邻。

●插入、删除灵活(不必移动节点,只要改变节点中的指针)。

20、数据类型是一个值的集合和定义在此集合上的一组操作的总称。

21、ADT 有两个重要特征:数据抽象和数据封装。

22、抽象数据类型(Abstract Data Type 简称ADT):是指一个数学模型以及定义在此数学模型上的一组操作。

23、抽象数据类型有:数据对象〈数据对象的定义〉、数据关系〈数据关系的定义〉、基本操作〈基本操作的定义〉。

24、数据类型的定义和含义。

定义:数据类型是一个值的集合和定义在这个值集上的一组操作的总称。

含义:将数据按一定次序与形式存放的结构。

24、算法空间复杂度S(n)算法的存储量包括:①输入数据所占的空间;②程序本身所占的空间;③辅助变量所占的空间。

25、算法具有有穷性、确定性、可行性、输入和输出五大特性。

26、抽象数据类型具有数据抽象、数据封装的特点。

27、数据的储存结构分为:顺序存储结构和链式存储结构。

第二章线性表1、线性结构的特点:在数据元素中的非空有限集中。

(1)存在唯一的一个被称作“第一”的数据元素;(2)存在唯一的一个被称作“最后一个”的数据元素;(3)除第一个外,集合中的每一个数据元素均只有一个前驱;(4)除最后一个外,集合中的每一个数据元素均只有一个后继。

2、线性表(Linear List) :一个线性表是n个数据元素的有限序列。

3、线性表的顺序存储实现:typedef struct {ElementType Data[MAXSIZE];int Last;} List;List L, *PtrL;4、初始化(建立空的顺序表)List *MakeEmpty( ){ List *PtrL;PtrL = (List *)malloc( sizeof(List) );PtrL->Last = -1;return PtrL;}5、查找int Find( ElementType X, List *PtrL ){ int i = 0;while( i <= PtrL->Last && PtrL->Data[i]!= X )i++;if (i > PtrL->Last) return -1; /* 如果没找到,返回-1 */ else return i; /* 找到后返回的是存储位置*/}6、插入算法void Insert( ElementType X, int i, List *PtrL ){ int j;if ( PtrL->Last == MAXSIZE-1 ){ /* 表空间已满,不能插入*/printf("表满");return;}if ( i < 1 || i > PtrL->Last+2) { /*检查插入位置的合法性*/printf("位置不合法");return;}for ( j = PtrL->Last; j >= i-1; j-- )PtrL->Data[j+1] = PtrL->Data[j]; /*将ai~an倒序向后移动*/PtrL->Data[i-1] = X; /*新元素插入*/PtrL->Last++; /*Last仍指向最后元素*/return;}7、删除算法void Delete( int i, List *PtrL ){ int j;if( i < 1 || i > PtrL->Last+1 ) { /*检查空表及删除位置的合法性*/printf (“不存在第%d个元素”, i );return ;}for ( j = i; j <= PtrL->Last; j++ )PtrL->Data[j-1] = PtrL->Data[j]; /*将ai+1~an顺序向前移动*/PtrL->Last--; /*Last仍指向最后元素*/return;}8、求表长int Length ( List *PtrL ){ List *p = PtrL; /* p指向表的第一个结点*/int j = 0;while ( p ) {p = p->Next;j++; /* 当前p指向的是第j 个结点*/}return j;}9、查找(1)按序号查找: FindKth;List *FindKth( int K, List *PtrL ){ List *p = PtrL;int i = 1;while (p !=NULL && i < K ) {p = p->Next;i++;}if ( i == K ) return p;/* 找到第K个,返回指针*/else return NULL;/* 否则返回空*/}(2)按值查找: FindList *Find( ElementType X, List *PtrL ){List *p = PtrL;while ( p!=NULL && p->Data != X )p = p->Next;return p;}10、插入(在链表的第i-1(1≤i≤n+1)个结点后插入一个值为X的新结点)List *Insert( ElementType X, int i, List *PtrL ){ List *p, *s;if ( i == 1 ) { /* 新结点插入在表头*/s = (List *)malloc(sizeof(List)); /*申请、填装结点*/s->Data = X;s->Next = PtrL;return s; /*返回新表头指针*/}p = FindKth( i-1, PtrL ); /* 查找第i-1个结点*/if ( p == NULL ) { /* 第i-1个不存在,不能插入*/printf("参数i错");return NULL;}else {s = (List *)malloc(sizeof(List)); /*申请、填装结点*/s->Data = X;s->Next = p->Next; /*新结点插入在第i-1个结点的后面*/p->Next = s;return PtrL;}}11、删除(删除链表的第i (1≤i≤n)个位置上的结点)List *Delete( int i, List *PtrL ){ List *p, *s;if ( i == 1 ) { /* 若要删除的是表的第一个结点*/s = PtrL; /*s指向第1个结点*/PtrL = PtrL->Next; /*从链表中删除*/free(s); /*释放被删除结点*/return PtrL;}p = FindKth( i-1, PtrL ); /*查找第i-1个结点*/if ( p == NULL ) {printf(“第%d个结点不存在”, i-1); return NULL;} else if ( p->Next == NULL ){printf(“第%d个结点不存在”, i); return NULL;} else {s = p->Next; /*s指向第i个结点*/p->Next = s->Next; /*从链表中删除*/free(s); /*释放被删除结点*/return PtrL;}}12、链表不具备的特点是 1 。

①可随机访问任一节点②插入删除不须要移动元素③不必事先估计存储空间④所需空间与其长度成正比13、带头结点的单链表head为空的判定条件是 2 。

①head==NULL ②head->next==NULL③head->next==head ④head!=NULL14、如果最常用的操作是取第i个结点及其前驱,则采用 4 存储方式最节省时间。

①单链表②双链表③单循环链表④顺序表第三章Chapter 3 栈(stacks)和队列(queues)1、栈是限定仅能在表尾一端进行插入、删除操作的线性表。

2、栈的特点是“后进栈的元素先出栈”(last in, first out),故栈又称为后进先出表(LIFO)。

3、一个栈是一些元素的线形列表,其中元素的插入和删除均在表的同一端进行。

插入和删除发生的一端称为栈顶(the top of the stack)。

4、第一个进栈的元素在栈底,最后一个进栈的元素在栈顶,第一个出栈的元素为栈顶元素,最后一个出栈的元素为栈底元素。

5、连续栈(Contiguous Stack)的类型定义#define MaxStack 50Typedef struct{datatype stack[MaxStack];int top;}Seqstack;Seqstack *s;6、判断栈是否已满?viod Push(Seqstack *s, datatype x ){if (s->top>=MaxStack-1) printf(“overflow”);else {s-> top++;s->stack[s->top]=x;}}7、判断栈是否为空?datatype pop(Seqstack *s ){ if (s->top<0){printf(“underflow”); return(NULL);}return(s->stack[s->top]);s->top--;}8、返回栈顶元素的值,栈不发生变化。

相关文档
最新文档