江苏师范大学数据结构复习
- 格式:docx
- 大小:32.51 KB
- 文档页数:13
江苏省考研计算机科学复习资料数据结构算法详解数据结构和算法是计算机科学的重要基础知识,也是考研计算机科学专业的重要考点。
掌握好数据结构和算法的知识,有助于提高编程能力和解决实际问题的能力。
本文将详细讲解江苏省考研计算机科学复习资料中的数据结构和算法相关内容。
一、线性表线性表是最基本的数据结构之一,它包括顺序表和链表两种形式。
顺序表是将元素按照一定的顺序存放在一块连续的存储空间中,链表是通过指针将元素存放在不连续的存储空间中。
1.1 顺序表顺序表是将若干个元素按照顺序存放在一块连续的存储空间中。
在顺序表中,元素的插入和删除操作需要移动大量的元素,所以时间复杂度较高。
1.2 链表链表是通过指针将元素存放在不连续的存储空间中。
链表有单链表、双链表和循环链表等形式。
链表的插入和删除操作相对于顺序表来说更加高效,但是访问某个元素的时间复杂度较高。
二、栈与队列栈和队列是两种特殊的线性表,它们限定了元素的插入和删除方式。
栈是一种后进先出(Last In First Out,LIFO)的数据结构,主要包括入栈和出栈两种操作。
栈的常见应用场景是函数调用的过程中,通过栈来保存函数的返回地址和局部变量。
2.2 队列队列是一种先进先出(First In First Out,FIFO)的数据结构,主要包括入队和出队两种操作。
队列的常见应用场景是任务调度的过程中,通过队列来管理任务的执行顺序。
三、树与二叉树树是一种非线性的数据结构,它的特点是一个父节点可以有多个子节点。
二叉树是一种特殊的树,它的每个节点最多只有两个子节点。
3.1 二叉树的遍历二叉树的遍历方式包括先序遍历、中序遍历和后序遍历。
先序遍历是先访问根节点,然后访问左子树和右子树;中序遍历是先访问左子树,然后访问根节点和右子树;后序遍历是先访问左子树和右子树,然后访问根节点。
3.2 二叉查找树二叉查找树是一种特殊的二叉树,它的左子树的值都比根节点小,右子树的值都比根节点大。
江苏省考研计算机复习资料数据结构重要考点解析数据结构作为计算机科学与技术专业的核心课程之一,在江苏省考研的计算机科学与技术专业考试中占据着重要的地位。
掌握数据结构的基本概念、常见算法以及相关的应用是考生顺利通过考试的关键。
本文将着重分析江苏省考研计算机复习资料中的数据结构重要考点,旨在为考生提供有针对性的复习指导。
一、线性表线性表是数据结构中最基本的一种数据结构,它包括顺序表、链表、栈和队列。
在江苏省考研计算机复习资料中,关于线性表的考点主要包括线性表的基本定义、存储结构和基本操作,以及线性表的应用,如栈的应用于表达式求值等。
二、树与二叉树树是一种重要的非线性数据结构,它具有分层次的结构特点。
在江苏省考研计算机复习资料中,树与二叉树是较为重要的考点之一。
考生需要熟悉树的基本概念与性质,以及树的遍历方式、存储结构和基本操作。
此外,二叉树的线索化和平衡二叉树等概念也是需要掌握的内容。
三、图图是数据结构中较为复杂的一种数据结构,它由顶点集合和边集合组成。
在江苏省考研计算机复习资料中,图是相对较难的考点之一。
考生需要掌握图的基本概念,熟悉图的存储方式、遍历方式和最短路径等算法。
此外,考生还需要了解图的应用,如最小生成树和拓扑排序等。
四、查找与排序查找与排序是数据结构中的两个重要操作。
在江苏省考研计算机复习资料中,查找与排序也是较为关键的考点之一。
查找的主要考点包括顺序查找、二分查找和哈希查找等;排序的主要考点包括冒泡排序、快速排序和归并排序等。
考生需要掌握各种查找和排序算法的原理和实现。
五、动态规划动态规划是一种解决多阶段决策问题的优化方法。
在江苏省考研计算机复习资料中,动态规划是比较高级的考点之一。
考生需要了解动态规划的基本思想和算法框架,能够应用动态规划解决实际问题。
综上所述,数据结构是江苏省考研计算机科学与技术专业考试中的重要内容之一。
考生在复习的过程中,需要重点把握线性表、树与二叉树、图、查找与排序以及动态规划等重要考点。
数据结构复习资料复习提纲知识要点归纳数据结构复习资料:复习提纲知识要点归纳一、数据结构概述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)简答题6题*5分=30分简要回答要点(2)分析题6题*5分=30分给出结果(3)设计题1题*10分=10分设计思想及结果(4)编程题1题*10分=10分完整代码(5)综合题1题*20分=20分抽象数据类型的定义、表示、实现、算法分析{定义=功能(ADT)表示=存储结构体实现=算法(基本操作)算法分析=时间、空间复杂度}考试概念有:1.数据结构{一、线性表(栈-队-列-串-数组-广义表-逻辑结构-存储结构-运算结构)二、非线性表(集合-树-图)}2.抽象数据类型数据对象-数据关系-基本操作3.算法性质-要求(设计)-效率(度量)4.实例查找:高效查找算法排序:高效的排序算法分析题考试题目参考(1)1-2-3-4-5-6顺序建BBST(2)6-5-4-3-2-1顺序建BBST简答题实例设计题:(1)(2)数据结构试卷(一)三、计算题(每题 6 分,共24分)1. 在如下数组A 中存储了一个线性表,表头指针为A [0].next ,试写出该线性表。
A 0 1 2 3 4 5 6 7data 60 50 78 90 34 40 next357241线性表为:(78,50,40,60,34,90)⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡0111010*******110101011102.请画出下图的邻接矩阵和邻接表。
3. 已知一个图的顶点集V 和边集E 分别为:V={1,2,3,4,5,6,7};E={(1,2)3,(1,3)5,(1,4)8,(2,5)10,(2,3)6,(3,4)15,(3,5)12,(3,6)9,(4,6)4,(4,7)20,(5,6)18,(6,7)25};用克鲁斯卡尔算法得到最小生成树,试写出在最小生成树中依次得到的各条边。
用克鲁斯卡尔算法得到的最小生成树为:(1,2)3, (4,6)4, (1,3)5, (1,4)8, (2,5)10, (4,7)204.画出向小根堆中加入数据4, 2, 5, 8, 3时,每加入一个数据后堆的变化。
江苏师范⼤学数据结构考试数据结构⼀、单项选择题(每⼩题2分,共20分)在下列每⼩题的四个备选答案中选出⼀个正确的答案,并将其字母标号填⼊题⽬的括号内。
1.栈和队列都是( C )。
A.顺序存储的线性结构B.链式存储的线性结构C.限制存储点的线性结构D.限制存储点的⾮线性结构 2.在⼀个单链表中,已知q 所指结点是p 所指结点的前驱结点,若在q 和p 之间插⼊s 结点,则执⾏( C )。
A.s->next=p->next; p->next=s; B.p->next=s->next; s->next=p;C.q->next=s;s->next=p;D.p->next=s; s->next=q;3.稀疏矩阵⼀般的压缩存储⽅法有两种,即( C )。
A .⼆维数组和三维数组B 三元组和散列C .三元组和⼗字链表D 散列和⼗字链表4.对于下⾯的⼆叉树,按后序遍历所得的结点序列为( D )。
A . 1234567B . 1245367C . 4251637D . 452673l5.深度为5的⼆叉树⾄多有( C )个结点。
A. 16 B .32 C. 31 D.106.Huffman 树的WPL 是指( C )。
A .除根以外所有结点的权值之和B .所有结点权值之和C .各叶⼦结点的带权路径长度之和D .根结点的值 7.下列排序⽅法中,( D )的⽐较次数与记录的初始排列状态⽆关? A .直接插⼊排序 B .起泡排序 C .快速排序 D .直接选择排序 8.若⼀棵⼆叉树具有10个度为2的结点,则该⼆叉树的度为0的结点个数是( C )A. 9 B .11 C .12 D .不确定9.设输⼊序列为1,2,3,4,5,借助⼀个栈不可能得到的输出序列是( C ) 。
A.1,2,3,4,5B.1,4,3,2,5C.4,1,3,2,5D.1,3,2,5,410.对下图,不能得到的拓扑序列是( D )A.l,2,3,4,5,6,7,8B.1,5,2,6,3,7,4,8C.1,2,5,6,3,4,7,8D.1,2,3,4,8,7,6,5⼆、填空题(每空1分,共20分)11.数据元素之间的关系称为结构,通常有如下四种基本结构:集合结构、线性结构、树形结构和图形结构。
2022年江苏师范大学计算机科学与技术专业《数据结构与算法》科目期末试卷A(有答案)一、选择题1、用数组r存储静态链表,结点的next域指向后继,工作指针j指向链中结点,使j沿链移动的操作为()。
A.j=r[j].nextB.j=j+lC.j=j->nextD.j=r[j]->next2、哈希文件使用哈希函数将记录的关键字值计算转化为记录的存放地址,因为哈希函数是一对一的关系,则选择好的()方法是哈希文件的关键。
A.哈希函数B.除余法中的质数C.冲突处理D.哈希函数和冲突处理3、以下与数据的存储结构无关的术语是()。
A.循环队列B.链表C.哈希表D.栈4、已知串S='aaab',其next数组值为()。
A.0123B.1123C.1231D.12115、有六个元素6,5,4,3,2,1顺序入栈,下列不是合法的出栈序列的是()。
A.543612B.453126C.346521D.2341566、循环队列放在一维数组A中,end1指向队头元素,end2指向队尾元素的后一个位置。
假设队列两端均可进行入队和出队操作,队列中最多能容纳M-1个元素。
初始时为空,下列判断队空和队满的条件中,正确的是()。
A.队空:end1==end2;队满:end1==(end2+1)mod MB.队空:end1==end2;队满:end2==(end1+1)mod (M-1)C.队空:end2==(end1+1)mod M;队满:end1==(end2+1) mod MD.队空:end1==(end2+1)mod M;队满:end2==(end1+1) mod (M-1)7、已知关键字序列5,8,12,19,28,20,15,22是小根堆(最小堆),插入关键字3,调整后的小根堆是()。
A.3,5,12,8,28,20,15,22,19B.3,5,12,19,20,15,22,8,28C.3,8,12,5,20,15,22,28,19D.3,12,5,8,28,20,15,22,198、有n(n>0)个分支结点的满二叉树的深度是()。
江苏省考研计算机复习资料数据结构与算法分析数据结构与算法分析是计算机科学与技术专业考研的重要内容之一,它对于学生们的编程能力和算法思维的培养具有重要意义。
本文将从数据结构与算法分析的基本概念和基础知识入手,深入探讨其相关内容,帮助江苏省考研计算机专业的学生更好地准备考试。
一、概述数据结构是计算机中存储、组织和管理数据的方式,而算法则是解决实际问题的具体步骤和方法。
数据结构与算法分析课程的学习,旨在让学生掌握数据结构的基本原理和常见数据结构的实现方式,以及算法设计与分析的基本思想和常见算法的应用。
二、数据结构1. 数组数组是最简单、也是最基础的数据结构之一。
它是由一组相同类型的元素组成,在内存中连续存储。
学生们需要理解数组的基本操作,如插入、删除、查找等,以及数组的优缺点和适用场景。
2. 链表链表是一种动态数据结构,它通过节点的引用实现元素之间的关联。
学生们需要了解不同类型的链表,如单链表、双链表和循环链表,并熟悉链表的插入、删除、查找等基本操作。
3. 栈与队列栈和队列是两种常见的数据结构。
栈是一种后进先出(LIFO)的数据结构,而队列是一种先进先出(FIFO)的数据结构。
学生们需要了解它们的实现方式,以及栈和队列的应用场景。
4. 树与图树和图是更为复杂的数据结构,它们在实际生活中的应用广泛。
学生们需要了解树和图的存储结构和基本操作,如遍历、查找等。
同时,树和图的算法设计与分析也是考研中的重点内容。
三、算法分析1. 算法设计与分析的基本思想算法设计是解决问题的核心过程,而算法分析则是评估算法效率的重要方法。
学生们需要了解常见的算法设计思想,如贪心算法、分治算法和动态规划算法等,以及常见算法的时间复杂度和空间复杂度的分析方法。
2. 常见算法的应用在考研复习中,学生们需要重点掌握一些常见算法的实现和应用。
例如,排序算法中的冒泡排序、插入排序和快速排序等;图算法中的最短路径算法和最小生成树算法等。
深入理解这些算法的原理和实现方式,对于解题和提高编程能力有着重要的帮助。
数据结构1一、单项选择题(每小题2分,共20分)在下列每小题的四个备选答案中选出一个正确的答案,并将其字母标号填入题目的括号内。
1.栈和队列都是( C )。
A.顺序存储的线性结构B.链式存储的线性结构C.限制存储点的线性结构D.限制存储点的非线性结构2.在一个单链表中,已知q所指结点是p所指结点的前驱结点,若在q和p之间插入s结点,则执行( C )。
A.s->next=p->next; p->next=s;B.p->next=s->next; s->next=p;C.q->next=s;s->next=p;D.p->next=s; s->next=q;3.稀疏矩阵一般的压缩存储方法有两种,即( C )。
A.二维数组和三维数组 B三元组和散列C.三元组和十字链表 D散列和十字链表4.对于下面的二叉树,按后序遍历所得的结点序列为( D )。
A.1234567B.1245367C.4251637D.452673l5.深度为5的二叉树至多有( C )个结点。
A. 16 B .32 C. 31 D.106.Huffman树的WPL 是指( C )。
A.除根以外所有结点的权值之和 B.所有结点权值之和C.各叶子结点的带权路径长度之和 D.根结点的值7.下列排序方法中,( D )的比较次数与记录的初始排列状态无关?A.直接插入排序 B.起泡排序 C.快速排序 D.直接选择排序8.若一棵二叉树具有10个度为2的结点,则该二叉树的度为0的结点个数是( C )A.9 B.11 C.12 D.不确定9.设输入序列为1,2,3,4,5,借助一个栈不可能得到的输出序列是( C ) 。
A.1,2,3,4,5B.1,4,3,2,5C.4,1,3,2,5D.1,3,2,5,410.对下图,不能得到的拓扑序列是( )A.l,2,3,4,5,6,7,8B.1,5,2,6,3,7,4,8C.1,2,5,6,3,4,7,8D.1,2,3,4,8,7,6,5二、填空题(每空1分,共20分)11.数据元素之间的关系称为结构,通常有如下四种基本结构:集合结构、线性结构、树形结构和图形结构。
数据结构复习题及答案数据结构习题一、名词解释1.数据、数据元素、数据项、数据结构、数据的逻辑结构、数据物理结构、顺序存储、链式存储、算法、时间复杂度、空间复杂度。
2.线性表、顺序表、单链表、双向链表、循环链表、双向循环链表、三个概念的区别:头指针、头结点、首元结点(第1个元素结点)。
3.栈(顺序栈、链栈)、队列(顺序队、链队)、循环队列、递归、稀疏矩阵、三元组。
4.树、叶子结点、结点的度、树的度、树的高(深)度、二叉树、遍历、满二叉树、完全二叉树、哈夫曼树、WPL、哈夫曼编码。
5.图(有向、无向)、网、边、弧、度、入度、出度、完全图(有向、无向)、(强)连通图(分量)、(最小)生成树、邻接矩阵、邻接表、DFS、BFS。
6.查找表、关键字、静态查找、动态查找、ASL、顺序查找、折半查找、分块查找、二叉排序树。
7、排序、内(外)排序、稳定性、插入(直接、希尔),交换(起泡、快速),选择(直接、堆),2路归并。
一、填空题1.数据结构是研究数据的_逻辑结构__和___物理结构__,并在这种结构上定义相关的运算,设计实现这些运算的算法,分析算法的效率。
算法的效率包括时间和空间两个方面,分别称为___时间复杂度____和__空间复杂度___。
2.数据的基本单元是__数据元素__,数据的最小单元是__数据项_。
3.算法是对特定问题求解___步骤___的一种描述,是指令的有限序列。
4.一个算法的时间复杂度为(3n3+2n—7),其数量级表示为O(n3)_。
5.一个算法具有5个特性:确定性、可行性、有穷性、输入和输出。
6.算法机能的阐发和怀抱,能够从算法的工夫庞大度和空间庞大度来评判算法的好坏。
7.数据的逻辑布局包孕调集布局、线性布局、树形布局和图型布局四品种型。
8.数据布局在计较机中的表示称为数据的物理布局,它能够采用__按次存储___或__链式存储_两种存储方法。
9.线性表有两种存储布局,划分为按次存储和链式存储。
江苏省考研计算机专业数据结构重点知识点梳理在江苏省考研计算机专业中,数据结构是一个非常重要的课程,它为学生提供了构建和组织数据的基础知识。
掌握数据结构的重点知识点对于考研的成功至关重要。
本文将对江苏省考研计算机专业数据结构的重点知识点进行梳理和总结。
一、线性表线性表是数据结构中最基本的一种数据结构,它包括数组、链表、堆栈和队列等。
在考研中,对线性表的掌握至关重要。
1.1 数组数组是一种连续存储结构,它的元素类型相同,并按一定的顺序排列。
在数据结构中,数组的重点知识点包括数组的定义、初始化、访问和遍历等操作。
此外,还需要了解动态数组的概念以及如何实现。
1.2 链表链表是一种非连续的存储结构,它的每个节点包含数据和指针。
链表的重点知识点包括单链表、双向链表和循环链表的定义、插入、删除和遍历等操作。
此外,还需要了解链表的存储结构以及如何实现。
1.3 堆栈堆栈是一种特殊的数据结构,它的特点是先进后出。
堆栈的重点知识点包括堆栈的定义、初始化、入栈和出栈等操作。
此外,还需要了解堆栈的应用场景以及如何实现。
1.4 队列队列是一种特殊的数据结构,它的特点是先进先出。
队列的重点知识点包括队列的定义、初始化、入队和出队等操作。
此外,还需要了解队列的应用场景以及如何实现。
二、树与二叉树树是一种非线性结构,它的节点之间存在一对多的关系。
二叉树是一种特殊的树,它的每个节点最多有两个孩子节点。
2.1 树树的重点知识点包括树的定义、节点的度和层次、树的遍历和树的表示等操作。
此外,还需要了解树的应用场景以及如何实现。
2.2 二叉树二叉树的重点知识点包括二叉树的定义、遍历方式(前序、中序和后序遍历)、线索二叉树和哈夫曼树等操作。
此外,还需要了解二叉树的应用场景以及如何实现。
三、图图是一种非线性结构,它由节点和边组成。
图可以分为有向图和无向图。
图的重点知识点包括图的定义、存储方式(邻接矩阵和邻接表)、图的遍历方式(深度优先搜索和广度优先搜索)以及最短路径算法和最小生成树算法等操作。
第一章数据:是客观事物的符号表示。
在计算机科学中指的是所有能输入到计算机中并被计算机程序处理的符号的总称。
数据元素是数据的基本单位,在程序中通常作为一个整体来进行考虑和处理。
一个数据元素可由若干个数据项组成。
数据项是数据的不可分割的最小单位。
数据项是对客观事物某一方面特性的数据描述。
数据对象:是性质相同的数据元素的集合,是数据的一个子集。
数据结构是指相互之间具有(存在)一定联系(关系)的数据元素的集合。
数据元素之间的相互联系(关系)称为逻辑结构。
数据元素之间的关系1 集合2线性结构3树形结构4图状结构或网状结构。
抽象数据类型:是指一个数学模型以及定义在该模型上的一组操作。
空间复杂度:是指算法编写成程序后,在计算机中运行时所需存储空间大小的度量。
算法(Algorithm):是对特定问题求解方法(步骤)的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。
特性1有穷性2确定性3可行性4输入5输出正确性2可读性3健壮性4通用性5效率与存储量需求.线性表特点:①存在一个唯一的被称为“第一个”的数据元素;②存在一个唯一的被称为“最后一个”的数据元素;③除第一个元素外,每个元素均有唯一一个直接前驱;④除最后一个元素外,每个元素均有唯一一个直接后继。
线性表(Linear List) :是由n(n≧0)个数据元素(结点)a1,a2,…an组成的有限序列。
线性表中的结点可以是单值元素(每个元素只有一个数据项) 。
线性表中的结点可以是记录型元素,每个元素含有多个数据项,每个项称为结点的一个域。
每个元素有一个可以唯一标识每个结点的数据项组,称为关键字。
顺序存储:把线性表的结点按逻辑顺序依次存放在一组地址连续的存储单元里。
顺序存储的线性表的特点:1线性表的逻辑顺序与物理顺序一致;2数据元素之间的关系是以元素在计算机内“物理位置相邻”来体现。
顺序线性表初始化Status Init_SqList( SqList *L ){ L->elem_array=( ElemType * )malloc(MAX_SIZE*sizeof( ElemType ) ) ;if ( !L -> elem_array ) return ERROR ;else { L->length= 0 ; return OK ; } }顺序线性表的插入Status Insert_SqList(Sqlist *L,int i ,ElemType e){ int j ;if ( i<0||i>L->length-1) return ERROR ;if (L->length>=MAX_SIZE){ printf(“线性表溢出!\n”); return ERROR ; }for ( j=L->length–1; j>=i-1; --j )L->Elem_array[j+1]=L->Elem_array[j];/* i-1位置以后的所有结点后移*/L->Elem_array[i-1]=e; /* 在i-1位置插入结点*/L->length++ ;return OK ;}顺序线性表的删除:ElemType Delete_SqList(Sqlist *L,int i){ int k ; ElemType x ;if (L->length==0){ printf(“线性表L为空!\n”); return ERROR; }else if ( i<1||i>L->length ){ printf(“要删除的数据元素不存在!\n”) ;return ERROR ; }else { x=L->Elem_array[i-1] ; /*保存结点的值*/for ( k=i ; k<L->length ; k++)L->Elem_array[k-1]=L->Elem_array[k];/* i位置以后的所有结点前移*/L->length--; return (x);}}线性表的链式存储结构:用一组任意的存储单元存储线性表中的数据元素。
用这种方法存储的线性表简称线性链表。
建立单链表:(头插入法)LNode *create_LinkList(void)/* 头插入法创建单链表,链表的头结点head作为返回值*/{ int data ;LNode *head, *p;head= (LNode *) malloc( sizeof(LNode));head->next=NULL; /* 创建链表的表头结点head */while (1){ scanf(“%d”, &data) ;if (data==32767) break ;p= (LNode *)malloc(sizeof(LNode));p–>data=data; /* 数据域赋值*/p–>next=head–>next ; head–>next=p ;/* 钩链,新创建的结点总是作为第一个结点*/}return (head);}单链表的插入void Insert_LNode(LNode *L,int i,ElemType e)/* 在以L为头结点的单链表的第i个位置插入值为e的结点*/{ int j=0; LNode *p,*q;p=L–>next ;while ( p!=NULL&& j<i-1){ p=p–>next; j++; }if (j!=i-1) printf(“i太大或i为0!!\n ”);else{ q=(LNode *)malloc(sizeof(LNode));q–>data=e; q–>next=p–>next;p–>next=q;}}单链表的删除void Delete_LinkList(LNode *L,int i)/* 删除以L为头结点的单链表中的第i个结点*/{ int j=1; LNode *p,*q;p=L; q=L->next;while ( p->next!=NULL&& j<i){ p=q; q=q–>next; j++; }if (j!=i) printf(“i太大或i为0!!\n ”);else{ p–>next=q–>next; free(q); }}第二章栈(Stack):是限制在表的一端进行插入和删除操作的线性表。
栈顶(Top):允许进行插入、删除操作的一端,又称为表尾。
用栈顶指针(top)来指示栈顶元素。
栈底(Bottom):是固定端,又称为表头空栈:当表中没有元素时称为空栈。
栈的初始化:(动态)Status Init_Stack(void){ SqStack S ;S.bottom=(ElemType *)malloc(STACK_SIZE *sizeof(ElemType));if (! S.bottom) return ERROR;S.top=S.bottom ; /* 栈空时栈顶和栈底指针相同*/S. stacksize=STACK_SIZE;return OK ;}压栈(元素进栈) (动态)Status push(SqStack S , ElemType e){ if (S.top-S.bottom>=S. stacksize-1){ S.bottom=(ElemType *)realloc((S. STACKINCREMENT+STACK_SIZE) *sizeof(ElemType)); /* 栈满,追加存储空间*/if (! S.bottom) return ERROR;S.top=S.bottom+S. stacksize ;S. stacksize+=STACKINCREMENT ;}*S.top=e; S.top++ ; /* 栈顶指针加1,e成为新的栈顶*/return OK;}弹栈(元素出栈) (动态)Status pop( SqStack S, ElemType *e )/*弹出栈顶元素*/{ if ( S.top== S.bottom )return ERROR ; /* 栈空,返回失败标志*/S.top-- ; e=*S. top ;return OK ;}栈的初始化(静态):SqStack Init_Stack(void){ SqStack S ;S.bottom=S.top=0 ; return(S) ;}压栈(元素进栈) (静态):Status push(SqStack S , ElemType e)/* 使数据元素e进栈成为新的栈顶*/{ if (S.top==MAX_STACK_SIZE-1)return ERROR; /* 栈满,返回错误标志*/S.top++ ; /* 栈顶指针加1 */S.stack_array[S.top]=e ; /* e成为新的栈顶*/return OK; /* 压栈成功*/}弹栈(元素出栈) (静态):Status pop( SqStack S, ElemType *e )/*弹出栈顶元素*/{ if ( S.top==0 )return ERROR ; /* 栈空,返回错误标志*/*e=S.stack_array[S.top] ;S.top-- ;return OK ;}队列(Queue):也是运算受限的线性表。
是一种先进先出(First In First Out ,简称FIFO)的线性表。
只允许在表的一端进行插入,而在另一端进行删除。
队首(front) :允许进行删除的一端称为队首。
队尾(rear) :允许进行插入的一端称为队尾循环队列:将为队列分配的向量空间看成为一个首尾相接的圆环循环队列的初始化:SqQueue Init_CirQueue(void){ SqQueue Q ;Q.front=Q.rear=0; return(Q) ;}循环队列入队操作Status Insert_CirQueue(SqQueue Q , ElemType e)/* 将数据元素e插入到循环队列Q的队尾*/{ if ((Q.rear+1)%MAX_QUEUE_SIZE== Q.front)return ERROR; /* 队满,返回错误标志*/Q.Queue_array[Q.rear]=e ; /* 元素e入队*/Q.rear=(Q.rear+1)% MAX_QUEUE_SIZE ;/* 队尾指针向前移动*/return OK; /* 入队成功*/}循环队列出队操作Status Delete_CirQueue(SqQueue Q, ElemType *x ) /* 将循环队列Q的队首元素出队*/{ if (Q.front+1== Q.rear)return ERROR ; /* 队空,返回错误标志*/*x=Q.Queue_array[Q.front] ; /* 取队首元素*/Q.front=(Q.front+1)% MAX_QUEUE_SIZE ;/* 队首指针向前移动*/return OK ;}链队列的初始化LinkQueue *Init_LinkQueue(void){ LinkQueue *Q ; QNode *p ;p=(QNode *)malloc(sizeof(QNode)) ; /* 开辟头结点*/p->next=NULL ;Q=(LinkQueue *)malloc(sizeof(LinkQueue)) ;/* 开辟链队的指针结点*/Q.front=Q.rear=p ;return(Q) ;}链队列的入队操作在已知队列的队尾插入一个元素e ,即修改队尾指针(Q.rear)。