数据结构期末复习知识点(兼容版)
数据结构期末复习汇总

数据结构期末复习汇总数据结构是计算机科学中十分重要的概念之一,它是指数据对象以及数据对象之间的关系、操作和操作规则的集合。
在计算机科学的学习中,掌握数据结构是至关重要的一步。
为了帮助大家复习期末考试,以下是一些数据结构的重要知识点的总结。
一、线性表线性表是最简单的一种数据结构,它是一种有序的数据元素集合。
线性表的特点是元素之间的关系是一对一的关系,每个元素都与它的前驱和后继相连接。
1.数组:数组是最常见的线性表结构,它由相同类型的数据元素组成,这些元素通过索引来访问。
2.链表:链表是另一种常见的线性表结构,它由节点组成,每个节点包含了数据以及一个指向下一个节点的指针。
二、栈和队列栈和队列是常用的线性结构,它们在操作上有一些限制。
1.栈:栈是一种具有后进先出(LIFO)特性的线性表。
栈中的元素只能在栈顶进行插入和删除操作。
2.队列:队列是一种具有先进先出(FIFO)特性的线性表。
队列中的元素只能在队尾进行插入操作,在队头进行删除操作。
三、树和二叉树树是一种非线性的数据结构,它由节点和边组成。
树的一个节点可以有多个子节点,但是每个节点只能有一个父节点。
1.二叉树:二叉树是一种特殊的树结构,每个节点最多只能有两个子节点。
2.二叉树:二叉树是一种特殊的二叉树,它满足左子树的所有节点的值都小于根节点的值,右子树的所有节点的值都大于根节点的值。
四、图图是一种非常重要的非线性结构,它由节点和边组成。
图的节点之间可以有多种不同的关系。
1.有向图:有向图是一种图结构,图的边有方向,从一个节点到另一个节点。
2.无向图:无向图是一种图结构,图的边没有方向。
五、排序和算法排序算法是对一组数据进行排序的算法,算法是找到目标元素在一组数据中的位置的算法。
1.冒泡排序:冒泡排序是一种交换排序算法,其核心思想是比较相邻的元素并进行交换,将最大(或最小)元素逐渐“冒泡”到数组的末尾。
2.快速排序:快速排序是一种分治排序算法,其核心思想是通过选择一个基准元素,将数组划分为两个子数组,其中一个子数组的所有元素都小于基准元素,另一个子数组的所有元素都大于基准元素,然后对两个子数组进行递归排序。
数据结构期末复习重点知识点总结

数据结构期末复习重点知识点总结一、数据结构概述数据结构是计算机科学中一门关于数据组织、存储和管理的学科。
它涉及到各种数据类型和它们之间的关系,以及对这些数据类型进行有效操作和处理的算法。
二、基本数据结构1. 数组- 数组是一种线性数据结构,用于存储相同类型的数据元素。
- 数组的特点是随机访问和连续存储。
- 数组的插入和删除操作需要移动其他元素,时间复杂度为O(n)。
2. 链表- 链表是一种线性数据结构,通过节点之间的指针链接来组织数据。
- 链表的特点是插入和删除操作简单,时间复杂度为O(1)。
- 链表分为单链表、双向链表和循环链表等不同类型。
3. 栈- 栈是一种具有后进先出(LIFO)特性的数据结构。
- 栈的操作主要包括压栈(Push)和弹栈(Pop)两个操作。
- 栈常用于表达式求值、递归算法的实现等场景。
4. 队列- 队列是一种具有先进先出(FIFO)特性的数据结构。
- 队列的操作主要包括入队(Enqueue)和出队(Dequeue)两个操作。
- 队列常用于实现缓冲区、消息队列等场景。
5. 树- 树是一种非线性的数据结构,由节点和边组成。
- 树的节点具有层级关系,由根节点、子节点和叶节点等组成。
- 常见的树结构有二叉树、红黑树、B树等。
6. 图- 图是一种非线性的数据结构,由节点和边组成。
- 图的节点之间可以有多对多的关系。
- 图的遍历方式有深度优先搜索(DFS)和广度优先搜索(BFS)。
三、常见的数据结构算法1. 排序算法- 冒泡排序、插入排序、选择排序等简单但效率较低的排序算法。
- 快速排序、归并排序、堆排序等高效的排序算法。
- 基数排序、桶排序等适用于特定场景的排序算法。
2. 查找算法- 顺序查找、二分查找等常用的查找算法。
- 树结构相关的查找算法,如二叉搜索树、红黑树等。
- 哈希查找、索引查找等高效的查找算法。
3. 图算法- Dijkstra算法、Bellman-Ford算法等最短路径算法。
数据结构复习资料复习提纲知识要点归纳

数据结构复习资料复习提纲知识要点归纳数据结构复习资料:复习提纲知识要点归纳一、数据结构概述1. 数据结构的定义和作用2. 常见的数据结构类型3. 数据结构与算法的关系二、线性结构1. 数组的概念及其特点2. 链表的概念及其分类3. 栈的定义和基本操作4. 队列的定义和基本操作三、树结构1. 树的基本概念及定义2. 二叉树的性质和遍历方式3. 平衡二叉树的概念及应用4. 堆的定义和基本操作四、图结构1. 图的基本概念及表示方法2. 图的遍历算法:深度优先搜索和广度优先搜索3. 最短路径算法及其应用4. 最小生成树算法及其应用五、查找与排序1. 查找算法的分类及其特点2. 顺序查找和二分查找算法3. 哈希查找算法及其应用4. 常见的排序算法:冒泡排序、插入排序、选择排序、归并排序、快速排序六、高级数据结构1. 图的高级算法:拓扑排序和关键路径2. 并查集的定义和操作3. 线段树的概念及其应用4. Trie树的概念及其应用七、应用案例1. 使用数据结构解决实际问题的案例介绍2. 如何选择适合的数据结构和算法八、复杂度分析1. 时间复杂度和空间复杂度的定义2. 如何进行复杂度分析3. 常见算法的复杂度比较九、常见问题及解决方法1. 数据结构相关的常见问题解答2. 如何优化算法的性能十、总结与展望1. 数据结构学习的重要性和难点2. 对未来数据结构的发展趋势的展望以上是数据结构复习资料的复习提纲知识要点归纳。
希望能够帮助你进行复习和回顾,加深对数据结构的理解和掌握。
在学习过程中,要注重理论与实践相结合,多进行编程练习和实际应用,提高数据结构的实际运用能力。
祝你复习顺利,取得好成绩!。
数据结构期末复习总结

第1章绪论1.数据(Data) :是描述客观事物的数字、字符以及所有能输入到计算机中并能被计算机接受的各种符号集合的统称。
包括数值数据和非数值数据(字符串、图形、图像、音频、视频)。
2.数据元素(Data Element) :表示一个事物的一组数据称为一个数据元素(结点顶点、记录);数据元素是数据的基本单位。
3.数据项(Data Item):是数据元素中有独立含义的、不可分割的最小标识单位(字段、域、属性)。
一个数据元素可由若干个数据项组成。
4.数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。
如字符集合C ={A,B,C,…} 。
数据(Data) :是描述客观事物的数字、字符以及所有能输入到计算机中并能被计算机接受的各种符号集合的统称。
包括数值数据和非数值数据(字符串、图形、图像、音频、视频)。
数据元素(Data Element) :表示一个事物的一组数据称为一个数据元素(结点、顶点、记录);数据元素是数据的基本单位。
数据项(Data Item):是数据元素中有独立含义的、不可分割的最小标识单位(字段、域、属性)。
一个数据元素可由若干个数据项组成。
数据对象(Data Object):是性质相同的数据元素的集合,是数据的一个子集。
如字符集合C ={A,B,C,…} 。
●数据的逻辑结构指数据元素之间的逻辑关系,用一个数据元素的集合和定义在此集合上的若干关系来表示。
●四种逻辑结构:集合、线性结构、树型结构、图状结构。
●数据结构的形式定义是一个二元组:Data-Structure=(D,S)其中:D是数据元素的有限集,S是D上关系的有限集。
例1:设数据逻辑结构B=(K,R)K={k1, k2, …, k9}R={ <k1, k3>,<k1, k8>,<k2, k3>,<k2, k4>,<k2, k5>,<k3, k9>,<k5, k6>,<k8, k9>,<k9, k7>,<k4, k7>,<k4, k6>有时候关系图不唯一(一般是无向图)●数据结构在计算机内存中的存储包括数据元素的存储和元素之间的关系的表示。
数据结构复习要点(汇总版)

第一章数据结构概述基本概念与术语1.数据:数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序所处理的符号的总称。
2.数据元素:数据元素是数据的基本单位,是数据这个集合中的个体,也称之为元素,结点,顶点记录。
(补充:一个数据元素可由若干个数据项组成。
数据项是数据的不可分割的最小单位。
)3.数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
(有时候也叫做属性。
)4.数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
(1)数据的逻辑结构:数据的逻辑结构是指数据元素之间存在的固有逻辑关系,常称为数据结构。
数据的逻辑结构是从数据元素之间存在的逻辑关系上描述数据与数据的存储无关,是独立于计算机的。
依据数据元素之间的关系,可以把数据的逻辑结构分成以下几种:1.集合:数据中的数据元素之间除了“同属于一个集合“的关系以外,没有其他关系。
2.线性结构:结构中的数据元素之间存在“一对一“的关系。
若结构为非空集合,则除了第一个元素之外,和最后一个元素之外,其他每个元素都只有一个直接前驱和一个直接后继。
3.树形结构:结构中的数据元素之间存在“一对多“的关系。
若数据为非空集,则除了第一个元素(根)之外,其它每个数据元素都只有一个直接前驱,以及多个或零个直接后继。
4.图状结构:结构中的数据元素存在“多对多”的关系。
若结构为非空集,折每个数据可有多个(或零个)直接后继。
(2)数据的存储结构:数据元素及其关系在计算机内的表示称为数据的存储结构。
想要计算机处理数据,就必须把数据的逻辑结构映射为数据的存储结构。
逻辑结构可以映射为以下两种存储结构:1.顺序存储结构:把逻辑上相邻的数据元素存储在物理位置也相邻的存储单元中,借助元素在存储器中的相对位置来表示数据之间的逻辑关系。
2.链式存储结构:借助指针表达数据元素之间的逻辑关系。
不要求逻辑上相邻的数据元素物理位置上也相邻。
数据结构复习提纲

数据结构复习提纲一、线性表线性表是最基本的数据结构之一,它是具有相同数据类型的 n 个数据元素的有限序列。
1、顺序表定义和特点:顺序表是用一组地址连续的存储单元依次存储线性表的数据元素。
存储结构:通常使用数组来实现。
基本操作:插入、删除、查找、遍历等。
时间复杂度分析:插入和删除操作在平均情况下的时间复杂度为O(n),查找和遍历操作的时间复杂度为 O(n)。
2、链表定义和特点:链表是通过指针将各个数据元素链接起来的一种存储结构。
单链表:每个节点包含数据域和指针域,指针域指向链表的下一个节点。
双链表:节点包含两个指针域,分别指向前驱节点和后继节点。
循环链表:尾节点的指针指向头节点,形成一个环形结构。
基本操作:插入、删除、查找等。
时间复杂度分析:插入和删除操作在平均情况下的时间复杂度为O(1),查找操作的时间复杂度为 O(n)。
二、栈和队列1、栈定义和特点:栈是一种限制在一端进行插入和删除操作的线性表,遵循“后进先出”的原则。
存储结构:顺序栈和链栈。
基本操作:入栈、出栈、栈顶元素获取等。
应用:表达式求值、括号匹配、函数调用等。
2、队列定义和特点:队列是一种在一端进行插入操作,在另一端进行删除操作的线性表,遵循“先进先出”的原则。
存储结构:顺序队列和链队列。
基本操作:入队、出队、队头元素获取等。
循环队列:解决顺序队列“假溢出”问题。
应用:层次遍历、消息队列等。
三、串1、串的定义和存储方式定长顺序存储堆分配存储块链存储2、串的基本操作串的赋值、连接、比较、求子串等。
3、模式匹配算法朴素的模式匹配算法KMP 算法:理解其原理和计算 next 数组的方法。
四、数组和广义表1、数组数组的定义和存储结构数组的地址计算特殊矩阵的压缩存储(如对称矩阵、三角矩阵、稀疏矩阵)2、广义表广义表的定义和表示广义表的递归算法1、树的基本概念定义、术语(如节点、度、叶子节点、分支节点、父节点、子节点、兄弟节点、层次等)树的性质2、二叉树定义和特点二叉树的性质完全二叉树和满二叉树3、二叉树的存储结构顺序存储链式存储4、二叉树的遍历先序遍历中序遍历后序遍历层序遍历5、二叉树的递归和非递归遍历算法实现线索化的目的和方法7、树、森林与二叉树的转换8、哈夫曼树定义和构造方法哈夫曼编码六、图1、图的基本概念定义、术语(如顶点、边、权、有向图、无向图、邻接矩阵、邻接表等)2、图的存储结构邻接矩阵邻接表十字链表邻接多重表3、图的遍历深度优先搜索(DFS)广度优先搜索(BFS)4、图的应用最小生成树(Prim 算法、Kruskal 算法)最短路径(Dijkstra 算法、Floyd 算法)拓扑排序关键路径七、查找1、查找的基本概念关键字、平均查找长度等2、顺序查找算法实现时间复杂度3、折半查找算法实现时间复杂度判定树4、分块查找5、二叉排序树定义和特点插入、删除操作查找算法6、平衡二叉树定义和调整方法7、 B 树和 B+树结构特点基本操作8、哈希表哈希函数的构造方法处理冲突的方法(开放定址法、链地址法等)八、排序1、排序的基本概念排序的稳定性2、插入排序直接插入排序折半插入排序希尔排序3、交换排序冒泡排序快速排序4、选择排序简单选择排序堆排序5、归并排序6、基数排序7、各种排序算法的时间复杂度、空间复杂度和稳定性比较。
数据结构复习要点(整理版)

第一章数据结构概述基本概念与术语1.数据:数据是对客观事物的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序所处理的符号的总称。
2.数据元素:数据元素是数据的基本单位,是数据这个集合中的个体,也称之为元素,结点,顶点记录。
(补充:一个数据元素可由若干个数据项组成。
数据项是数据的不可分割的最小单位。
)3.数据对象:数据对象是具有相同性质的数据元素的集合,是数据的一个子集。
(有时候也叫做属性。
)4.数据结构:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。
(1)数据的逻辑结构:数据的逻辑结构是指数据元素之间存在的固有逻辑关系,常称为数据结构。
数据的逻辑结构是从数据元素之间存在的逻辑关系上描述数据与数据的存储无关,是独立于计算机的。
依据数据元素之间的关系,可以把数据的逻辑结构分成以下几种:1.集合:数据中的数据元素之间除了“同属于一个集合“的关系以外,没有其他关系。
2.线性结构:结构中的数据元素之间存在“一对一“的关系。
若结构为非空集合,则除了第一个元素之外,和最后一个元素之外,其他每个元素都只有一个直接前驱和一个直接后继。
3.树形结构:结构中的数据元素之间存在“一对多“的关系。
若数据为非空集,则除了第一个元素(根)之外,其它每个数据元素都只有一个直接前驱,以及多个或零个直接后继。
4.图状结构:结构中的数据元素存在“多对多”的关系。
若结构为非空集,折每个数据可有多个(或零个)直接后继。
(2)数据的存储结构:数据元素及其关系在计算机内的表示称为数据的存储结构。
想要计算机处理数据,就必须把数据的逻辑结构映射为数据的存储结构。
逻辑结构可以映射为以下两种存储结构:1.顺序存储结构:把逻辑上相邻的数据元素存储在物理位置也相邻的存储单元中,借助元素在存储器中的相对位置来表示数据之间的逻辑关系。
2.链式存储结构:借助指针表达数据元素之间的逻辑关系。
不要求逻辑上相邻的数据元素物理位置上也相邻。
数据结构复习资料

数据结构复习资料一、数据结构的基本概念数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
它不仅要考虑数据元素的存储,还要关注数据元素之间的关系以及对这些数据的操作。
数据元素是数据的基本单位,例如整数、字符、字符串等。
而数据项则是数据元素的最小不可分割的部分。
常见的数据结构类型包括线性结构(如数组、链表、栈和队列)、树形结构(如二叉树、二叉搜索树、AVL 树等)、图形结构等。
二、线性结构1、数组数组是一组具有相同数据类型的元素的有序集合。
它的优点是可以通过下标快速访问元素,但插入和删除操作可能比较低效,因为需要移动大量元素。
2、链表链表由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
链表的插入和删除操作相对简单,但访问特定元素需要遍历链表。
3、栈栈是一种特殊的线性表,遵循后进先出(LIFO)原则。
入栈和出栈操作是栈的基本操作。
4、队列队列遵循先进先出(FIFO)原则,入队和出队操作是队列的主要操作。
三、树形结构1、二叉树二叉树是每个节点最多有两个子节点的树形结构。
它有满二叉树、完全二叉树等特殊形式。
2、二叉搜索树二叉搜索树的左子树的所有节点值小于根节点值,右子树的所有节点值大于根节点值。
这使得查找、插入和删除操作的平均时间复杂度为 O(log n)。
3、 AVL 树AVL 树是一种自平衡的二叉搜索树,通过旋转操作保持树的平衡,从而保证查找、插入和删除的时间复杂度始终为 O(log n)。
四、图形结构图形由顶点和边组成,可以分为有向图和无向图。
常见的算法包括深度优先搜索和广度优先搜索,用于遍历图形。
五、数据结构的操作对于不同的数据结构,常见的操作包括创建、插入、删除、查找、遍历等。
1、插入操作根据数据结构的特点,选择合适的位置插入新元素。
2、删除操作准确找到要删除的元素,并处理删除后的结构调整。
3、查找操作利用数据结构的特性,提高查找效率。
4、遍历操作如前序遍历、中序遍历、后序遍历对于二叉树;深度优先遍历和广度优先遍历对于图形。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》期末复习复习要点:第一章1.相关基本概念:数据、数据元素(基本单位)、数据项(最小单位)、算法及其特征等;◎数据:所有能输入到计算机中并被计算机程序处理的符号总称。
◎数据元素:基本单位。
◎数据项:最小单位。
◎算法特征(5点):有穷性;确定性;可行性;输入;输出。
2.逻辑结构、存储结构(物理结构)及其类型;◎逻辑结构有四种基本类型:集合、线性结构、树形结构和网状结构。
◎数据元素之间的关系有两种不同的表示方法:顺序映象和非顺序映象,并由此得到两种不同的存储结构:顺序存储结构和链式存储结构。
◎注:期中考题目数据结构分为两大类,即为逻辑结构和存储结构。
其中逻辑结果又分为线性结构和非线性结构,存储结构一共有四种(顺序、链接、索引、散列)。
3.算法分析:语句频度(执行次数)计算、时间和空间复杂度分析。
表示方法◎语句频度:直接写次数。
◎时间复杂度:O(执行次数),如:O(n)。
◎空间复杂度:O(所需空间)第二章1.顺序表(数组)插入、删除、有序表合并算法及其移动次数计算;数据元素表示 L.elem[0] [1] [2] [3] [4] [5] [6] [7]◎顺序表插入算法思想:如果要在序号5前插入元素e,需要将序号5~8向后移动一个位置。
▲移动次数为4次,公式n-i+1◎顺序表删除算法思想:如果要删除序号5元素,需要将6~8依次向前移动一位▲移动次数为3次,公式n-i◎有序表合并LA = (3,5,8,11)LB = (2,6,8,9,11,15,20)则LC = (2,3,5,6,8,8,9,11,11,15,20)算法思想(以非递减为例):La和Lb非递减排列,La与Lb中元素逐个比较,较小的先插入Lc中。
▲注:非递减是指递增排序,但元素有可能相等,与之相对的有非递增排序。
▲移动次数为(La.length + Lb.length)2.链表(有无头节点、单双、循环)插入(前、后)、删除(前、本身、后)的指针挂接、建立(不带头节点)算法。
◎单链表▲每个节点有数据域和指针域 data next头 a1 a2 a3 a4 a5 a6带头节点L→→→→→→→P↑a1 a2 a3 a4 a5 a6不带头节点L→→→→→→P↑单循环链表●在P(a3)节点前插入S节点(1)Q = P; //先让Q指向a3(2)P = L; //P指向第一个节点(带头结点指向头结点,不带头结点指向a1)(3)while(P->next != Q) P = P->next; //找到a3的前驱a2,P指向a2(4)S->next = P->next; //P->next为a3,让S->next等于a3(5)P->next = S; //a2指针域指向节点S●在P(a3)节点后插入S节点(1)S-next = P->next;(2)P->next = S;●删除P(a3)前一个节点(1)Q = P;(2)P = L;(3)while(P->next->next != Q) P = P->next; //找到a1(4)P->next = P->next->next; //让a1指针域指向a3,从而删除a2●删除P(a3)节点(1)Q = P;(2)P = L;(3)while(P->next != Q) P = P->next; //找到a2(4)P->next = P->next->next; //让a2指针域指向a4,从而删除a3●删除P(a3)后一个节点(1)P->next = P->next->next; //让a3指针域指向a5,从而删除a4◎双链表▲每个节点有前驱指针、数据域、后继指针 prior data next双循环链表头 a1 a2 a3 a4●在P(a2)节点前插入S节点▲技巧:先让S->prior 和S->next与链表建立关系注:步骤(4)必须在步骤(3)后面(1)S->next = P; //先让S->next指向a2(2)S->prior = P->prior; //S->prior指向a1(3)P->prior->next = S; //再把a1->next指向S(4)P->prior = S; // a2->prior指向S●在P(a2)节点后插入S节点注:步骤(4)必须在步骤(3)后面(1)S->prior = P;(2)S->next = P->next;(3)P->next->prior = S; //a3->prior指向S(4)P->next = S;●删除P(a2)前一个节点a1(1)Q = P->prior; //Q指向要被删除的a1;(2)P->prior = P->prior->prior; //P->priro指向头(3)P->prior->next = P; //头->next指向P(4)free(Q); //释放a1的存储空间●删除P(a2)节点(1)P->next->prior = p->prior;(2)P->prior->next = p->next;(3)free(P);●删除P(a2)后一个节点a3(1)Q = P->next;(2)P->next = P->next->next; //a2->next指向a4(3)P->next->prior = P; //a4->prior = P(4)free(Q); //释放a3存储空间◎建立(不带头节点)单链表读程序:设n为2(i取0,1)i = 0时,p↑L↑q↑i = 1时,→L↑q↑ p↑ L↑q↑ p↑→L↑ q↑p↑第三章1.栈的进出序列、栈、队列、循环队列的满/空条件;▲由于栈的插入、删除操作是限制在栈顶进行的,因而后进栈的元素必然是先出栈,0.所以栈是“后进先出”表。
▲由于队列的输入、输出操作分别在队的两端进行,因此先入队的元素必然先输出,故队列又称为“先进先出”表◎栈的进出序列例题:进栈序列为123,可能得到的出栈序列是什么?答:共五种123/132/213/231/321进出栈情况(以132序列为例):1进栈→1出栈,输出1→2进栈→3进栈→3出栈→2出栈输出32 ◎栈、队列、循环队列的满/空条件栈空条件:s.top = s.base;栈满条件:s.top - s.base = stacksize;队空条件:Q.front=Q.rear;队满条件:q->rear - q->front = MAXSIZE循环队列空条件:Q.front=Q.rear循环队列满条件:为避免在队满是队头指针和队尾指针也是重合的情况,规定队列中还有一个空的存储单元时为队满,即为Q.front=(Q.rear+1)MOD maxsize(MOD为取余运算符)。
因而,这种循环队列不适合用动态数组作为存储结构。
2. 栈、队列的存储结构、基本操作算法(双向栈);◎栈存储结构●顺序栈typedef struct{SElemType *base;SElemType *top;int stacksize;}SqStack;●链式栈◎队列存储结构●顺序存储结构●链式存储结构◎双向栈存储结构:typedef struct{Elemtype *base[2];Elemtype *top[2];}BDStacktype; //双向栈类型初始化:Status Init_Stack(BDStacktype &tws, int m)//初始化一个大小为m的双向栈tws {tws.base[0 ]= (Elemtype*)malloc(sizeof(Elemtype)*m);tws.base[1] = tws.base[0] + m;tws.top[0] = tws.base[0];tws.top[1] = tws.base[1];return OK;}//Init_Stack入栈:Status push(BDStacktype &tws, int i, Elemtype x)//x入栈,i=0表示低端栈,i=1表示高端栈{if(tws.top[0] > tws.top[1]) return OVERFLOW;//注意此时的栈满条件if (i == 0) *tws.top[0]++ = x;else if (i == 1) *tws.top[1]-- = x;else return ERROR;return OK;}//push出栈:Status pop(BDStacktype &tws, int i, Elemtype &x)//x出栈,i=0表示低端栈,i=1表示高端栈{if (i == 0){if (tws.top[0] == tws.base[0]) return OVERFLOW;x = *--tws.top[0];}else if(i == 1){if(tws.top[1] == tws.base[1]) return OVERFLOW;x = *++tws.top[1];}else return ERROR;return OK;}//pop第四章1.字符串模式匹配的简单算法;int Index(SString S, SString T, int pos){ // 算法4.5// 返回子串T在主串S中第pos个字符之后的位置。
// 若不存在,则函数值为0。
// 其中,T非空,1≤pos≤StrLength(S)。
int i = pos;int j = 1;while (i <= S[0] && j <= T[0]) {if (S[i] == T[j]) { // 继续比较后继字符++i;++j;}else { // 指针后退重新开始匹配i = i-j+2; //此时i为上次开始比较位置的下一位 j = 1;}}if (j > T[0]) return i-T[0];else return 0;} // Index2.计算NEXT。
j :1 2 3 4 5 6 7串:a b c a b a anext[j]:0 1 1 1 2 3 2▲技巧:第一二个肯定是0,1!如果要计算next[4],找的字符串必须是以第3个字符c为结尾,第1个字符a为开头的。