数据结构与算法设计知识点(精心整理)
- 格式:doc
- 大小:10.46 MB
- 文档页数:22
数据结构大纲知识点一、绪论。
1. 数据结构的基本概念。
- 数据、数据元素、数据项。
- 数据结构的定义(逻辑结构、存储结构、数据的运算)- 数据结构的三要素之间的关系。
2. 算法的基本概念。
- 算法的定义、特性(有穷性、确定性、可行性、输入、输出)- 算法的评价指标(时间复杂度、空间复杂度的计算方法)二、线性表。
1. 线性表的定义和基本操作。
- 线性表的逻辑结构特点(线性关系)- 线性表的基本操作(如初始化、插入、删除、查找等操作的定义)2. 顺序存储结构。
- 顺序表的定义(用数组实现线性表)- 顺序表的基本操作实现(插入、删除操作的时间复杂度分析)- 顺序表的优缺点。
3. 链式存储结构。
- 单链表的定义(结点结构,头指针、头结点的概念)- 单链表的基本操作实现(建立单链表、插入、删除、查找等操作的代码实现及时间复杂度分析)- 循环链表(与单链表的区别,操作特点)- 双向链表(结点结构,基本操作的实现及特点)三、栈和队列。
1. 栈。
- 栈的定义(后进先出的线性表)- 栈的基本操作(入栈、出栈、取栈顶元素等操作的定义)- 顺序栈的实现(存储结构,基本操作的代码实现)- 链栈的实现(与单链表的联系,基本操作的实现)- 栈的应用(表达式求值、函数调用栈等)2. 队列。
- 队列的定义(先进先出的线性表)- 队列的基本操作(入队、出队、取队头元素等操作的定义)- 顺序队列(存在的问题,如假溢出)- 循环队列的实现(存储结构,基本操作的代码实现,队空和队满的判断条件)- 链队列的实现(结点结构,基本操作的实现)- 队列的应用(如操作系统中的进程调度等)四、串。
1. 串的定义和基本操作。
- 串的概念(字符序列)- 串的基本操作(如连接、求子串、比较等操作的定义)2. 串的存储结构。
- 顺序存储结构(定长顺序存储和堆分配存储)- 链式存储结构(块链存储结构)3. 串的模式匹配算法。
- 简单的模式匹配算法(Brute - Force算法)的实现及时间复杂度分析。
《数据结构》复习重点知识点归纳一.数据结构的章节结构及重点构成数据结构学科的章节划分基本上为:概论,线性表,栈和队列,串,多维数组和广义表,树和二叉树,图,查找,内排,外排,文件,动态存储分配。
对于绝大多数的学校而言,“外排,文件,动态存储分配”三章基本上是不考的,在大多数高校的计算机本科教学过程中,这三章也是基本上不作讲授的。
所以,大家在这三章上可以不必花费过多的精力,只要知道基本的概念即可。
但是,对于报考名校特别是该校又有在试卷中对这三章进行过考核的历史,那么这部分朋友就要留意这三章了。
按照以上我们给出的章节以及对后三章的介绍,数据结构的章节比重大致为:·概论:内容很少,概念简单,分数大多只有几分,有的学校甚至不考。
·线性表:基础章节,必考内容之一。
考题多数为基本概念题,名校考题中,鲜有大型算法设计题,如果有,也是与其它章节内容相结合。
·栈和队列:基础章节,容易出基本概念题,必考内容之一。
而栈常与其它章节配合考查,也常与递归等概念相联系进行考查。
·串:基础章节,概念较为简单。
专门针对于此章的大型算法设计题很少,较常见的是根据KMP进行算法分析。
·多维数组及广义表:基础章节,基于数组的算法题也是常见的,分数比例波动较大,是出题的“可选单元”或“侯补单元”。
一般如果要出题,多数不会作为大题出。
数组常与“查找,排序”等章节结合来作为大题考查。
·树和二叉树:重点难点章节,各校必考章节。
各校在此章出题的不同之处在于,是否在本章中出一到两道大的算法设计题。
通过对多所学校的试卷分析,绝大多数学校在本章都曾有过出大型算法设计题的历史。
·图:重点难点章节,名校尤爱考。
如果作为重点来考,则多出现于分析与设计题型当中,可与树一章共同构成算法设计大题的题型设计。
·查找:重点难点章节,概念较多,联系较为紧密,容易混淆。
出题时可以作为分析型题目给出,在基本概念型题目中也较为常见。
《数据结构与算法》第四章串知识点及例题精选串(即字符串)是一种特殊的线性表,它的数据元素仅由一个字符组成。
4.1 串及其基本运算4.1.1 串的基本概念1.串的定义串是由零个或多个任意字符组成的字符序列。
一般记作:s="s1 s2 … s n""其中s 是串名;在本书中,用双引号作为串的定界符,引号引起来的字符序列为串值,引号本身不属于串的内容;a i(1<=i<=n)是一个任意字符,它称为串的元素,是构成串的基本单位,i是它在整个串中的序号; n为串的长度,表示串中所包含的字符个数,当n=0时,称为空串,通常记为Ф。
2.几个术语子串与主串:串中任意连续的字符组成的子序列称为该串的子串。
包含子串的串相应地称为主串。
子串的位置:子串的第一个字符在主串中的序号称为子串的位置。
串相等:称两个串是相等的,是指两个串的长度相等且对应字符都相等。
4.2 串的定长顺序存储及基本运算因为串是数据元素类型为字符型的线性表,所以线性表的存储方式仍适用于串,也因为字符的特殊性和字符串经常作为一个整体来处理的特点,串在存储时还有一些与一般线性表不同之处。
4.2.1 串的定长顺序存储类似于顺序表,用一组地址连续的存储单元存储串值中的字符序列,所谓定长是指按预定义的大小,为每一个串变量分配一个固定长度的存储区,如:#define MAXSIZE 256char s[MAXSIZE];则串的最大长度不能超过256。
如何标识实际长度?1. 类似顺序表,用一个指针来指向最后一个字符,这样表示的串描述如下:typedef struct{ char data[MAXSIZE];int curlen;} SeqString;定义一个串变量:SeqString s;这种存储方式可以直接得到串的长度:s.curlen+1。
如图4.1所示。
s.dataMAXSIZE-1图4.1 串的顺序存储方式12. 在串尾存储一个不会在串中出现的特殊字符作为串的终结符,以此表示串的结尾。
考研数据结构图的必背算法及知识点Prepared on 22 November 20201.最小生成树:无向连通图的所有生成树中有一棵边的权值总和最小的生成树问题背景:假设要在n个城市之间建立通信联络网,则连通n个城市只需要n—1条线路。
这时,自然会考虑这样一个问题,如何在最节省经费的前提下建立这个通信网。
在每两个城市之间都可以设置一条线路,相应地都要付出一定的经济代价。
n个城市之间,最多可能设置n(n-1)/2条线路,那么,如何在这些可能的线路中选择n-1条,以使总的耗费最少呢分析问题(建立模型):可以用连通网来表示n个城市以及n个城市间可能设置的通信线路,其中网的顶点表示城市,边表示两城市之间的线路,赋于边的权值表示相应的代价。
对于n个顶点的连通网可以建立许多不同的生成树,每一棵生成树都可以是一个通信网。
即无向连通图的生成树不是唯一的。
连通图的一次遍历所经过的边的集合及图中所有顶点的集合就构成了该图的一棵生成树,对连通图的不同遍历,就可能得到不同的生成树。
图G5无向连通图的生成树为(a)、(b)和(c)图所示:G5G5的三棵生成树:可以证明,对于有n个顶点的无向连通图,无论其生成树的形态如何,所有生成树中都有且仅有n-1条边。
最小生成树的定义:如果无向连通图是一个网,那么,它的所有生成树中必有一棵边的权值总和最小的生成树,我们称这棵生成树为最小生成树,简称为最小生成树。
最小生成树的性质:假设N=(V,{E})是个连通网,U是顶点集合V的一个非空子集,若(u,v)是个一条具有最小权值(代价)的边,其中,则必存在一棵包含边(u,v)的最小生成树。
解决方案:两种常用的构造最小生成树的算法:普里姆(Prim)和克鲁斯卡尔(Kruskal)。
他们都利用了最小生成树的性质1.普里姆(Prim)算法:有线到点,适合边稠密。
时间复杂度O(N^2)假设G=(V,E)为连通图,其中V为网图中所有顶点的集合,E为网图中所有带权边的集合。
数据结构必考知识点总结在准备考试时,了解数据结构的基本概念和相关算法是非常重要的。
以下是一些数据结构的必考知识点总结:1. 基本概念数据结构的基本概念是非常重要的,包括数据、数据元素、数据项、数据对象、数据类型、抽象数据类型等的概念。
了解这些概念有助于更好地理解数据结构的本质和作用。
2. 线性表线性表是数据结构中最基本的一种,它包括顺序表和链表两种实现方式。
顺序表是将数据元素存放在一块连续的存储空间内,而链表是将数据元素存放在若干个节点中,每个节点包含数据和指向下一个节点的指针。
了解线性表的概念和基本操作是非常重要的。
3. 栈和队列栈和队列是两种特殊的线性表,它们分别具有后进先出和先进先出的特性。
栈和队列的实现方式有多种,包括数组和链表。
掌握栈和队列的基本操作和应用是数据结构的基本内容之一。
4. 树结构树是一种非线性的数据结构,它包括二叉树、多路树、二叉搜索树等多种形式。
了解树的基本定义和遍历算法是必考的知识点。
5. 图结构图是一种非线性的数据结构,它包括有向图和无向图两种形式。
了解图的基本概念和相关算法是非常重要的,包括图的存储方式、遍历算法、最短路径算法等。
6. 排序算法排序是一个非常重要的算法问题,掌握各种排序算法的原理和实现方式是必不可少的。
常见的排序算法包括冒泡排序、选择排序、插入排序、快速排序、归并排序等。
7. 查找算法查找是另一个重要的算法问题,包括顺序查找、二分查找、哈希查找、树查找等。
了解各种查找算法的原理和实现方式是必考的知识点之一。
8. 算法复杂度分析算法的时间复杂度和空间复杂度是评价算法性能的重要指标,掌握复杂度分析的方法和技巧是非常重要的。
9. 抽象数据类型ADT是数据结构的一种概念模型,它包括数据的定义和基本操作的描述。
了解ADT的概念和实现方式是非常重要的。
10. 动态存储管理动态存储管理是数据结构中一个重要的问题,包括内存分配、内存释放、内存回收等。
了解动态存储管理的基本原理和实现方式是必考的知识点之一。
数据结构和算法数据结构和算法是计算机科学领域中最为重要的概念之一。
数据结构是用于组织和存储数据的一种方式,而算法则是一种解决问题的方法和过程。
通过深入研究数据结构和算法,我们可以更好地理解计算机程序的内部运作,并在开发和优化程序时获得更好的结果。
首先,让我们简单介绍一下数据结构。
数据结构是计算机科学中的一个重要概念,它指的是一种组织和存储数据的方式。
将数据存储在恰当的数据结构中可以使程序更加高效和可读。
常用的数据结构包括数组、链表、栈、队列、堆等。
每种数据结构都具有自己的属性和用途,因此在选择数据结构时需要仔细考虑。
通过使用适当的数据结构,我们可以更轻松地解决各种计算机科学问题。
例如,在搜索数据时,二叉搜索树是一种非常有用的数据结构。
它可以帮助我们快速地查找数据,提高程序的效率。
在存储具有层次结构的数据时,树也是一种非常好的数据结构。
树结构可用于表示组织机构、文件系统等等。
除了数据结构外,算法是另一个非常重要的概念。
算法是一种明确的过程,用于解决特定问题。
它描述了一系列操作,这些操作需要以明确的方式执行,以获得期望的结果。
算法可以用于各种计算机领域,如数据分析、图像处理等。
在计算机科学领域中,许多技术都是基于算法的。
例如,排序、搜索和图形处理都依赖于算法。
常见的算法包括分治法、贪心算法、动态规划等。
分治法是一种将问题分为若干子问题,并将这些子问题分别解决后合并的方法。
贪心算法则是选择局部最优解,最终得到整体最优解的一种方法。
动态规划是一种将问题分解为子问题并重复利用先前计算结果的方法。
数据结构和算法的应用非常广泛,通过深入学习它们,我们可以获得灵活的编程能力,提高程序的性能。
当我们需要在庞大的数据集中查找特定数据时,通过合理地选取数据结构和算法,我们可以大大加快程序的执行速度。
此外,在开发复杂的程序时,数据结构和算法也可以使我们更加清晰地理解程序的逻辑,从而更好地进行调整和优化。
总之,数据结构和算法是计算机科学领域中非常重要的概念,它们可以帮助我们更高效地解决各种问题。
数据结构与算法基础作为计算机科学中最基础的核心理论学科之一,数据结构与算法几乎涵盖了所有计算机科学的领域。
随着科技的不断发展和计算机的越来越普及,数据结构与算法的重要性也越来越被人们所认识并广泛应用于各个领域。
因此,作为一名计算机专业学生,在数据结构与算法这门学科的学习中必须掌握其基本概念和算法实现,并且应该在学习过程中注重理解算法的精髓和内涵。
一、数据结构数据结构,指数据之间的关系,包括数据的存储和组织方式。
对于计算机程序员来说数据结构是非常重要的,因为理解数据结构的本质意义,创造出合适的数据结构来满足实际应用需求并可以提高程序执行效率,而这点又可以极大地影响整个计算机的工作效率。
常见的数据结构有线性结构、树形结构、图形结构等。
这里主要介绍一些常见的数据结构:1. 线性结构:常见的有数组、链表、队列、栈等。
- 数组:数组是由相同类型的元素所组成的一组连续内存储单元,并按序号索引组成的,称为线性结构。
在数组中,查找元素的效率较高,但其插入和删除的效率非常低。
- 链表:由若干个结点组成,每个结点包含具有相同数据类型的数据元素和指向下一结点的指针(或称链),最后一个节点不指向任何结构称为空结点。
单向链表仅有一个指向下一结点的指针。
双向链表每个结点都有两个指针,均指向前后两个结点。
链表的时间效率优于数组,在插入和删除操作中,链表可以很快的完成。
- 队列:队列是一种操作受限的线性结构,它具有先进先出(FIFO)的特点。
队列有两个指针,即队首指针和队尾指针。
从队首插入和删除一个元素,从队尾删除一个元素。
插入恒等于入队操作,删除等于出队操作。
- 栈:栈是一种操作受限的线性结构,它具有先进后出(LIFO)的特点。
栈有两个主要操作:压入和弹出。
压入元素即入栈操作,弹出元素即出栈操作。
栈的应用非常广泛,比如从栈中打印寻址路径和存储路径,栈在很多算法的实现中被广泛地应用。
2. 树形结构:由结点和连接结点的边组成。
- 二叉树:二叉树是一个树形结构,它满足每个节点最多有两个子节点。
第一章概述一、概念:1.学科:数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等等。
2.概念:由某一数据对象及该对象中所有数据成员之间的关系组成。
具体来说,数据结构包含三个方面的内容,即数据的逻辑结构,数据的存储结构和对数据所施加的运算。
3.这三个方面的关系为:1)数据的逻辑结构独立于计算机,是数据本身所固有的。
2)存储结构也称为物理结构,是逻辑结构在计算机存储器中的映像,必须依赖于计算机。
3)运算是指所施加的一组操作总称。
运算的定义直接依赖于逻辑结构,但运算的实现必依赖于存贮结构。
4.数据(data):信息的载体,指能够输入到计算机中,并被计算机识别和处理的符号的集合。
例如:数字、字母、汉字、图形、图像、声音都称为数据。
5.数据元素(data element):数据元素是组成数据的基本单位。
数据元素是一个数据整体中相对独立的单位。
但它还可以分割成若干个具有不同1属性的项(字段),故不是组成数据的最小单位。
6.逻辑结构:从解决问题的需要出发,为实现必要的功能所建立的数据结构,它属于用户的视图,是面向对象的。
7.物理结构:指数据该如何在计算机中存放,是数据逻辑结构的物理存储方式,是属于具体实现的视图,是面向计算机的。
8.逻辑结构与存储结构二者关系:物理结构是逻辑结构的存储映象。
任何一个算法的设计取决于选定的数据(逻辑)结构,而算法的实现依赖于采用的存储结构。
9.从逻辑结构划分数据结构:线性结构和非线性结构(树、图)10.线性结构:1)元素之间为一对一的线性关系2)第一个元素无直接前驱3)最后一个元素无直接后继11.非线性结构231) 元素之间为一对多或多对多的非线性关系2) 每个元素有多个直接前驱或多个直接后继12.顺序存储:数据元素存储方法:所有元素存放在一片连续的存贮单元中。
数据元素之间关系表示:逻辑上有相邻关系的元素存放到计算机内存仍然相邻,即存储位置体现了数据元素之间的关系。
1 数据结构与算法设计知识点 试题类型: 本课程为考试科目(闭卷笔试),试题类型包括:概念填空题(10 %),是非判断题(10 %),单项选择题(40 %),算法填空题(10%),算法应用题(20 %),算法设计题(10 %)。
第一章 绪论 重点内容及要求: 1、 了解与数据结构相关的概念(集合、数据、数据元素、数据项、关键字、元素之间的关系等)。
数据: 所有能被输入到计算机中,且能被计算机处理的符号的集合。是计算机操作的对象的总称。是计算机处理的信息的某种特定的符号表示形式。 数据元素:是数据(集合)中的一个“个体”,数据结构中的基本单位,在计算机程序中通常作为一个整体来考虑和处理。 数据项:是数据结构中讨论的最小单位,数据元素可以是一个或多个数据项的组合 关键码:也叫关键字(Key),是数据元素中能起标识作用的数据项。 其中能起到唯一标识作用的关键码称为主关键码(简称主码);否则称为次关键码。通常,一个数据元素只有一个主码,但可以有多个次码。 关系:指一个数据集合中数据元素之间的某种相关性。 数据结构:带“结构”的数据元素的集合。这里的结构指元素之间存在的关系。 数据类型:是一个值的集合和定义在此集合上的一组操作的总称。
2、 掌握数据结构的基本概念、数据的逻辑结构(四种)和物理结构(数据元素的表示与关系的表示、两类存储结构:顺序存储结构和链式存储结构)。 数据结构包括逻辑结构和物理结构两个层次。
数据的逻辑结构:是对数据元素之间存在的逻辑关系的一种抽象的描述,可以用一个数据元素的集合和定义在此集合上的若干关系来表示 逻辑结构有四种:线性结构、树形结构、图状结构、集合结构 数据的物理结构:是其逻辑结构在计算机中的表示或实现,因此又称其为存储结构。 存储结构:顺序存储结构和链式存储结构 顺序存储结构:利用数据元素在存储器中相对位置之间的某种 2
特定的关系来表示数据元素之间的逻辑关系; 链式存储结构:除数据元素本身外,采用附加的“指针”表示数据元素之间的逻辑关系。 3、 了解算法分析的基本方法,掌握算法时间复杂度相关的概念。 算法:是为了解决某类问题而规定的一个有限长的操作序列
或处理问题的策略 一个算法必须满足以下五个重要特性:1.有穷性 2.确定性 3.可行性4.有输入 5.有输出 设计算法时,通常还应考虑满足以下目标: 1.正确性,2.可读性, 3.健壮性 4.高效率与低存储量需求 如何估算 算法的时间复杂度? 算法 = 控制结构 + 原操作 (固有数据类型的操作) 算法的执行时间 = 原操作(i)的执行次数×原操作(i)的执行时间 算法的执行时间与 原操作执行次数之和成正比 算法的空间复杂度定义为: S(n) = O(g(n)) 表示随着问题规模 n 的增大,算法运行所需存储量的增长率与 g(n) 的增长率相同。 算法的存储量包括: 1. 输入数据所占空间 2. 程序本身所占空间 3. 辅助变量所占空间
第二章 线性表 重点内容及要求: 1、 掌握线性表的顺序存储结构,了解顺序表的存储特点(数据元素在内存中依次顺序存储),优点:可随机存取访问;缺点:结点的插入/删除操作不方便。 线性表:是一种最简单的数据结构,也是构造其它各类复杂
数据结构的基础。一个数据元素的有序(次序)集。它有顺序和链式两种存储表示方法。 线性表必有: 1.集合中必存在唯一的一个“第一元素” 2.集合中必存在唯一的一个 “最后元素” 3.除最后元素在外,均有 唯一的后继; 4.除第一元素之外,均有 唯一的前驱 定义如下:
∑ 3
typedef int ElemType; typedef struct{ ElemType*elem; //存储数据元素的一维数组; int length; //线性表当前长度; int listsize; //当前分配数组容量; }SqList; Void InitSqList(SqList A,int maxsize)//初始化线性表 { A.elem = (ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!A.elem) { exit(0); } A.length = 0; A.listsize = LIST_INIT_SIZE; return ; }
2、 了解线性表的链式存储结构,重点掌握带头结点的单链表的基本操作(结点的插入与删除运算),了解单向循环链表和双向链表存储表示方法。 单链表:用一组地址任意的存储单元存放线性表中的数据元素。
以元素(数据元素的映象) + 指针(指示后继元素存储位置) = 结点 (表示数据元素 或 数据元素的映象) 单链表是一种顺序存取的结构,求以此为存储表示的线性表长度,可设置一个计数器
3、了解有序线性表的特点(顺序有序表、有序链表)。 有序线性表:线性表中的数据元素相互之间可以比较,并且数据
元素在线性表中依值非递减或非递增有序排列,即 ai≥ai-1 或 ai≤ai-1(i = 2,3,…, n),则称该线性表为有序表(Ordered List)
4、学会对线性表设计相关的算法进行相应的处理。 第三章 排序 重点内容及要求: 1、掌握对顺序表数据记录进行排序的基本思路和常规操作(比较、移动),了解排序算法的稳定性问题。 2、掌握简单选择排序、直接插入排序、冒泡排序算法,了解各种排序算法的特点及时间复杂度。 排序:将一组“无序”的记录序列按某一关键字调整为“有序”
的记录序列。 若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序;反之则为外部排序。 选择排序:从记录的无序子序列中“选择”关键字最小或最大的 4
记录,并将它加入到有序子序列中,以此方法增加记录的有序子序列的长度 基本代码如下 for(i=0;i{ k=i;/*假设当前趟的第一个数为最值,记在k中 */ for(j=i+1;jif(a[k]k=j;/*则将其下标记在k中*/ if(k!=i)/*若k不为最初的i值,说明在其后找到比其更大的数*/ { t=a[k];a[k]=a[i];a[i]=t;}/*则交换最值和当前序列的第一个数*/ }
插入排序:插入排序是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。 代码如下:void InsertSort ( SqList &L) // 对顺序表L作插入排序
{ for ( i=2; i<=L.length; ++i ) if ( L.r[i].key < L.r[i-1].key ) { L.r[0] = L.r[i]; // 复制为哨兵 for ( j=i-1; L.r[0].key < L.r[j].key; --j ) L.r[j+1] = L.r[j]; // 记录后移 L.r[j+1] = L.r[0]; // 插入到正确位置 } } 冒泡排序:泡排序是一种最直观的排序方法,在排序过程中,将
相邻的记录的关键字进行比较,若前面记录的关键字大于后面记录的关键字,则将它们交换,否则不交换。或者反过来,使较大关键字的记录后移,像水中的气泡一样,较小的记录向前冒出,较大的记录 像石头沉入后部。故称此方法为冒泡排序法 代码如下: void BubbleSort( SqList &L ) { RcdType W; i = L.length; while (i >1) { // i>1 表明上一趟曾进行过记录的交换 lastExchangeIndex = 1; for (j = 1; j < i; j++){ if (L.r[j+1].key < L.r[j].key) { W=L.r[j];L.r[j] =L.r[j+1];L.r[j+1] = W; // 互换记录 lastExchangeIndex = j; } } i = lastExchangeIndex; // 一趟排序中无序序列中最后一个记录的位置 } 5
} 3、 了解什么是堆? 堆是满足下列性质的数列{r1, r2, …,rn}:
(小顶堆) (大顶堆)
第四章 栈和队列 重点内容及要求: 1、掌握栈和队列的结构特点及基本操作(入栈、出栈/入队、出队)。 栈(后进先出),队列(先进先出)
构造空栈: void InitStack_Sq (SqStack &S) { // 构造一个空栈S S.elem = new SElemType[maxsize]; S.top =-1; S.stacksize = maxsize; S.incrementsize=incresize; } 栈:(入栈) void Push_Sq(SqStack &S, SElemType e) { if (S.top == S.stacksize-1) incrementStacksize (S); // 如果顺序栈的空间已满,应为栈扩容 S.elem[++S. top] = e; // 在栈顶插入数据元素 } 栈:(入栈) bool Pop_Sq (SqStack &S, SElemType &e) { // 若栈不空,则删除S的栈顶元素, // 用e返回其值,并返回TRUE; // 否则返回FALSE。 if (S.top == -1) return FALSE; e = S.elem[S.top- -]; return TRUE; }
2、对于顺序栈,熟悉栈空和栈满的条件;对于链栈,掌握其栈空的条件。 #include using namespace std;
122
iiii
rr
rr
122
iiii
rr
rr