数据结构复习文献.docx
- 文档编号:11180015
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:12
- 大小:20.73KB
数据结构复习文献.docx
《数据结构复习文献.docx》由会员分享,可在线阅读,更多相关《数据结构复习文献.docx(12页珍藏版)》请在冰豆网上搜索。
数据结构复习文献
第一章绪论
1.数据:
是信息的载体,它能被计算机识别、存储和加工处理。
它是计算机程序加工的原料。
2.数据元素(DataElement):
【数据的基本单位,在不同条件下数据元素又可分为元素、节点、定点、记录等.】
3.数据对象(DataObject):
【具有相同性质的数据元素的集合】
4.数据结构(ObjectStructure):
是指相互之间存在着一种或多种关系的数据元素的集合。
【集合结构;线性结构;树形结构;树形结构】
5.数据的存储结构:
(a)、顺序存储结构:
把逻辑上相连的元素存储在物理位置相邻的存储单元中。
(b)、链式存储方法:
对逻辑上相邻的元素不要求其物理位置相邻【特点:
存储空间不一定连续;逻辑关系是有指针来体现的;逻辑上相等,物理上不一定相邻;非随机存取(顺序存取),即访问任何元素的时间不同。
】
6.算法:
是对特定问题求解步骤的一种描述,是指令的有限序列。
算法特性和要素:
【
(1)有穷性
(2)确定性(3)可行性(4)输入量(5)输出量】
7.算法含义的了解P9
8.算法要求的了解[算法的评价标准](正确、可读、健壮、高效)
9.算法性能分析与度量
{
一、时间复杂度:
是指程序运行从开始到结束所需要的时间。
【
估算算法的时间复杂度常用的方法:
a、求最深层循环内的简单语句(原操作)的重复执行的次数;b、当难与计算是,只需求它关于n的增长率或阶即可;c、当循环次数未知(与输入数据有关),求最坏环境下的简单语句(原操作)的重复执行的次数。
例:
计算下面求累加和程序段的时间复杂度。
【考点】
(1)sum=0;(一次)
(2)for(i=1;i<=n;i++);(n次)
(3)for(j=1;j<=n;j++);(n*n次)
(4)sum++;(n*n次)
解:
T(n)=2n*n+n+1=O(n*n).
】
二、空间复杂度:
}
第二章数组【不考】
第三章链表【线性表】
数组是一种数据存储的线性表
链表也是一种线性表.
1.线性表常见的运算
a、初始化Initiate(L):
创建一个空的线性表L
b、求长度Length(L):
返回表中元素个数
C、访问一个元素et(L,i):
返回线性表的第i个元素
d、求前去Prior(L,elem):
返回线性表中elem元素的前驱
e、求后继Next(L,elem):
返回线性表中elem元素的后继
f、查找(定位)Locate(L,x):
求x数据元素在线性表中的位置
2.插入Insert(L,i,b):
将数据元素插入到线性表L的第i个元素之前.(考虑空间满的情况)
插入前a1a2...ai-1aiai+1...an
插入后a1a2...ai-1baiai+1...an
例:
3.删除Delete(L,i):
删除线性表中的第i个元素
删除前a1a2...ai-1aiai+1...an
删除后a1a2...ai+1...an
例:
publicboolLinkList_cancel(inti)
/*删除单链表L上的第i个数据结点*/
{
ListNodep,q;
q=LinkList_Get(i-1);/*查找第i-1个结点*/
if(q==null){Console.WriteLine("第i-1个结点不存在");returnfalse;}
else
{
if(q.next==null)
{Console.WriteLine("第i个结点不存在");returnfalse;}
else
{
p=q.next;/*p指向第i个结点*/
q.next=p.next;/*从链表中删除*/
returntrue;
}
}
}
4.判断是否为空Empty(L):
线性表空,则返回true,否则为false.
5.输出线性表Print(L):
输出相信表的各个元素.
6.
第四章栈、队列和哈希表
1.栈和队列是软件设计中最常用的两种数据结构,它们的逻辑结构和线性表相同。
特点:
在于运算受到了限制:
栈按“后进先出”的规则进行操作,队按“先进先出”的规则进行操作,故称作运算受限制的线性表。
2.栈(stack):
是一种特殊的线性表(数据元素之间的关系是线性关系),其插入删除只能在表的一段进行,另一端固定不动。
【允许插入、删除的这一端成为栈顶、另一固定端成为栈底】
3.栈的操作
(1)栈初始化Inistack(s):
将栈置为空。
(2)入栈Push(s):
即在栈顶插入一个元素;
(3)出战Pop(s):
即在栈顶删除一个元素。
(4)取栈顶元素Get_top(s):
访问栈顶元素。
(5)判断栈是否为空Empty(s):
判断是否为空。
(6)求栈的大小Current_size(s):
求栈中元素个数。
(7)栈清Clear(s):
将栈清为空。
4.队列(先进先出):
一种特殊的线性表(数据元素之间关系是线性关系),其插入、删除分别在表两端进行,一端只能插入、另一端只能删除。
队首(front):
进行删除的一端;
队尾(rear):
进行插入的一端;
入队:
再队尾插入一个元素;
出对:
在队首删除一个元素.
5.队列的操作
(1)队列初始化Iniqueue(Q):
将队列置为空。
(2)入队Enqueue(Q):
即在队尾插入一个元素;
(3)出对Dlqueue(Q):
即在队首删除一个元素。
(4)取队首元素Gethead(Q):
访问队首元素。
(5)判断队列是否为空Empt(Q)
(6)求队列的大小Currnt_size(Q)
(7)队列的清空
6.队列的代码实现:
usingSystem;
usingSystem.Collections;
publicclassSampleQueue
{
publicstaticvoidMain()
{
//初始化一个队列.
QueuemyQueue=newQueue();
myQueue.Enqueue("My");
myQueue.Enqueue("name");
myQueue.Enqueue("XiaoShujing.");
//输出队列的属性和队列中元素的值
Console.WriteLine("myQueue");
Console.WriteLine("\tCount:
{0}",myQueue.Count);
Console.Write("\tValues:
");
}
publicstaticvoidPrintValues(QueuemyQueue)
{
IEnumerablemyEnumerator=myQueue.GetEnumerator();
while(myEnumerator.MoveNext())
{
Console.Write("\t{0}",myEnumerator.current);
}
Console.WriteLine();
}
}
7.栈和队列的区别:
【栈是先进后出,只能在栈顶插入和删除。
队列是先进先出,只能在队头删除,队尾插入】
第五章二叉树
1.二叉树(BinaryTree):
是个有限元素的集合,该集合或者为空、或者由一个成为根(root)的元素及两个不相交的、被分别成为左子树和又子树的二叉树组成。
2.二叉树的性质【重点考点】:
性质一:
二叉树的第i层上最多有2的(i-1)次方个结点(I>=1);
性质二:
深度为k的二叉树至多有2的k次方-1个结点(k>=1);性质三:
对任意一颗二叉树T,如果其叶子树为n0,度为2的结点树为n2,则n0=n2+1.
性质四:
具有n个结点的完全二叉树的深度k为[log2(n)]+1.
性质五:
对于具有n个结点的完全二叉树进行编号,则对于任意i(1<=i<=n)的结点,有:
(1)如果i>1,则序号为i的结点的双亲结点的序号为i/2;如果i=1,则序列号为i的结点是根节点,无双亲结点.
(2)如果2i>n则结点i没有左孩子,否则,其左孩子的编号为1i
(3)如果2i+1>n,则结点i没有右孩子,否则,其右孩子存在.
3.[满二叉树fullbinarytree]高度为k的二叉树,若具有2的k次方-1个节点,成为满二叉树。
4.完全二叉树的特点【了解】:
(1)只有最后一层是不满的,不满的结点首先出现在左边;
(2)至多只有最下面的两层结点的度小于2;(3)任何结点的左子树的高度不会小于右子树的高度且左、右子数高度最大相差1;(4)叶子只能出现在最后两层上。
【遍历:
重点考点】
{二叉树的操作(遍历、插入、删除、建立).
遍历:
[广度遍历;深度遍历:
前序、中序、后序遍历]}
5.二叉树的遍历(Traversal):
二叉树的遍历是指按照某种顺序访问二叉树中的每个结点,使每个结点被访问一次且仅被访问一次。
(D:
根结点;L:
遍历根结点的左子树;R:
遍历根结点的右子树)
(1)先序遍历(DLR):
是从当前结点(temp)开始,然后访问其左孩子,再访问右孩子。
只有左子树访问完才可能访问右子树!
递归概念算法:
【a、如果temp为空,退出;b、访问temp,输出值;c、对temp的左孩子重复第一步;d、对temp的右孩子重复第一步】
例:
publicvoidPreorderTraversal(Nodetemp)
{
if(temp!
=null)
{
Console.WriteLine("节点值为:
"+temp.Value.ToString());//输出结点的数据域
PreorderTraversal(temp.Left);//先序遍历root的左子树
PreorderTraversal(temp.Right);//先序遍历root的右子树
}
else
return;
}
(2)中序遍历(LDR):
【a、如果temp为空,退出;b、访问temp的左孩子;c、对temp重复第一部;d、对temp的右孩子重复第一步。
】
(3)后序遍历(LRD)【a、如果temp为空,退出;b访问temp的左孩子;c、对temp的右孩子重复第一步;d、对temp重复第一步。
】
6.二叉树的应用
统计出给定二叉树中叶子结点的树目
PublicstaticintGetNumber(Nodetemp)//当前结点
{
if(temp.Right==null&&temp.Left==null)
{
return1;
}
if(temp==null)
{
return0;
}
returnGetNumber(temp.Left)+GetNumber(temp.Right);
}
7.表达式的二叉树不是唯一的。
前缀表达式(前序遍历得到的)、中缀表达式(中序遍历得到的)、后缀表达式(后序遍历的到的)。
8.二叉树:
【左子树一定小于右子树,根结点一定大于左子树,右子树一定大于根结点。
】
第六章树【不考试】
1.树(Tree)——非线性数据结构.数据元素之间是一种层次关系,【是一个非空的有限元素的集合,元素有且只有一个前驱,但可以有零个或多个后继.】
2.数转换成二叉树:
先把兄弟连接起来,再去掉兄弟与父结点的连接就得到了一个二叉树.
3.二叉树转换成森林:
例:
三棵树的森林转换成二叉树
先将各个树转换成二叉树,再将第二棵树的二叉树挂在第一棵树的右子树上,将第三棵树的二叉树挂在第二棵树的右孩子上,作为第二棵二叉树的右孩子,从而成为了一个二叉树。
4.树的遍历比二叉树的遍历简单
【先根遍历;后跟遍历:
先访问左右子树再访问根】
第七章图【不考试】
【集合
线性结构:
(一般线性表
栈和队列
字符串
广义表和数组。
)
层状结构:
树和二叉树结构
网状结构:
图结构】
第八章查找
1.查找表种类:
静态查找表:
数据集合在查找前后不变
动态查找表:
...................................会变
2.查找方法:
(1)顺序查找;
(2)二分<折半>查找;(3)插值查找;(4)分类树查找;(5)Hash查找。
3.静态查找表
查找算法的评价:
空间:
占用的辅助空间少;
时间:
时间少。
查找的基本操作是比较,因此时间主要指比较次数。
4.静态查找表:
静态查找表是顺序或是链式存储的线性表——顺序查找.(思想简单,催查找的要求少,应用面广。
比较次数多O(N)).
5.【静态查找表是顺序存储的、有序的线性表——折半查找】【特点:
对查找表要求多,比较次数较少O(log2(n);联想到二叉树的高度】
<折半查找的思想为:
在有序表中,取中间元素作为比较对象,若给定值与中间元素的关键吗相等,则查找成功;若给定的值小于中间元素的关键吗,则在中间元素的左半区继续查找。
若给定值大于中间元素的关键码,则在中间元素的右半区继续查找。
不断重复上述查找过程,直到查找成功,或所查找的区域无数据元素,查找失败。
>
步骤:
(1)low=1;high=length;//设置初始区间
(2)当low>high时,返回查找失败信息
(3)low<=high,mid=(low+high)/2;//取中点
a、若kx (2)//查找在左半区进行 b、若kx>tb1.elem[mid].key,low=mid+1;转 (2)//查找在右半区进行 c、若kx=tb1.elem[mid],key,返回数据元素在表中位置 6.分块查找 特点: 要求立索引表;效率介于折半和顺序之间。 因此: (1)对于一般性表(数据元素无序排列)一般采用顺序查找方法. (2)有序线性表: 二分查找,插值查找等.(3)静态树表: 静态树查找. 7.动态查找: 第九章排序 1.排序: 是计算机程序设计中的一种重要操作,其功能是对一个数据元素集合过序列重新排列成一个按数据元素某个项值有序的排序。 作为排序依据的数据项成为“排序码”,也即数据元素的关键码。 2.排序分为类 【内排序: 指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列。 外排序: 指排序过程中还需访问外存储器,足够大的元素序列,因不能完全放入内存,只能使用外排序。 】 3.交换排序 泡沫排序【重点考点: 算法思想及过程】 方法: r[j]序列中关键码最大的记录 一趟泡沫方法为: (1)i=1;//设置从第一个记录开始进行两两比较 (2)若i>=j,一趟泡沫结束。 (3)比较r[i]与r[i+1],若r[i]<=r[i+1],不交换,转(5) (4)当r[i]>r[i+1],r[0]=r[i];r[i]=r[i+1];r[i+1]=r[0];将r[i]与r[i+1]交换 (5)i=i+1;调整对下两个记录进行两两比较,转 (2) 冒泡排序的算法如下: (1)j=n;//从n记录的表开始 (2)若j<2,排序结束 (3)i=1;//一趟泡沫,设置从第一个记录开始进行两两比较 (4)若i>=j,一趟泡沫结束,j=j-1;泡沫表的记录数-1,转 (2) (5)比较r[i]与r[i+1],若r[i]<=r[i+1];将进行r[i]与r[i+1]交换 (6)当r[i]>r[i+1]时,r[i]<-->r[i+1];将r[i]与r[i+1]交换 (7)i=i+1;调整,对下两个记录进行两两比较,转(4). 5.快速排序【最常用的排序方法】 概念: 是通过比较关键码、交换记录,以某个记录为界(该记录称为支点),将待排序列分成两部分。 快速排序的代码: 6.选择排序: 7.简单选择排序 操作方法: 第一躺,从n个记录中找出关键吗最小的记录与第一个记录交换;第二趟,从第二个记录开始的n-1个记录中再选出关键吗最小的记录与第二个记录交换; 简单排序代码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 复习 文献