ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:56.02KB ,
资源ID:19299760      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/19299760.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构导论自学考试概念整理文档格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构导论自学考试概念整理文档格式.docx

1、2易读性;算法应易于阅读和理解,以便于调试和扩充。3健壮性;当环境发生变化时,算法能适当地做出反应或进行处理,不会产生不需要的运行结果。4高效率;即达到所需的时间和空间性能。11.算法的时间复杂度T(n):是该算法的时间耗费,是求解问题规模n的函数。记为O(n)。时间复杂度按数量级递增排列依次为:常数阶O(1)、对数阶O(log2)、线性阶O(n)、线性对数阶O(nlog2)、平方阶O(n2)、立方阶O(n3)、k次方阶O(nk)、指数阶O(2n)。13.算法的空间复杂度S(n):是该算法的空间耗费,是求解问题规模n的函数。12.算法的特征:有穷性;确定性;可行性;输入;输出。13. 决定算法

2、运行时间的因素:(1)问题的规模;(2)编译时间;(3)指令执行速度;(4)重复执行指令的速度。1.线性表:是由n(n0)个数据元素组成的有穷序列。2.线性表的基本运算有:1)Initiate(L),加工型运算,作用是构造空表,即表的初始化;2)Length(L),引用型运算,其结果是表的结点个数,即表长;3)Get (L,i), 引用型运算,若1iLength(L),其结果是表中的第i个结点;否则,为一特殊值。4)Locate (L,x) ,引用型运算,查找L中值为x的结点并返回结点在L中的位置,若有多个x则返回首个;否则返回特殊值表示查找失败。5)Insert (L,x,i),加工型运算,

3、在表的第i个位置插入值为x的新结点,要求1iLength(L)+1;6)Delete (L,i),加工型运算,删除表的第i个位置的结点,要求1iLength(L);3.顺序表:是线性表的顺序存储结构,即按顺序存储方式构造的线性表的存储结构。4.顺序表结点的存储地址计算公式:Loc(ai)=Loc(a1)+(i-1)*C;1in (其中Loc(a1)是顺序表的第一个结点,C每个变量占用的内存单元)。5.顺序表上的基本运算(1)插入Void insert_sqlist(sqlist L,datatype x,int i) /*将X插入到顺序表L的第i-1个位置*/ if(L.last=maxsiz

4、e) error(“overflow”); /*溢出*/ if(iL.last+1) error (“position error”); /*非法位置*/ for(j=L.last;j=i;j-) L.dataj=L.dataj-1; /*结点依次后移*/ L.datai-1=x; /*置入X*/ L.last=L.last+1 /*修改表长*/ 在顺序表上插入要移动表的n/2结点,算法的平均时间复杂度为O(n)。(2)删除Void delete_sqlist(sqlist L,int i); /*删除顺序表L中的第i个位置上的结点*/ if (inext!=NULL)&(p-data!=x)

5、 p=p-next;j+; If p-data=x return(j);Else return(0);(3)删除时间复杂度为O(n) Void delete_lklist(lklist head;int i) /*删除表head的第i个结点*/ p=find_lklist(head,i-1); /*先找待删结点的直接前驱*/q=p- /*q指向待删结点*/ p-next=q- /*摘除待删结点*/ free(q); /*释放已摘除结点q*/ Else error(“不存在第i个结点”) /*否则给出相关信息*/ (3)插入时间复杂度为O(n) Void insert_lklist(lklist

6、 head,datatype x,int i) /*在表head的第i个位置上插入一个以x为值的新结点*/ P=find_lklist (head,i-1); /*先找第i-1个结点*/ if(p=NULL) /*若第i-1个结点不存在*/ error(“不存在第i个位置”) /*退出并给出出错信息*/ S=malloc(size); s-data=x; /*否则生成新结点*/ S-next=p- /*结点*p的链域值传给结点*s的链域*/ next=s; /*修改*p的链域*/ 7.循环链表:是一种首尾相连的链表。特点是无需增加存储量,仅对表的链接方式修改使表的处理灵活方便。主要优点:从表中

7、任一结点出发都能通过后移做而扫描整个循环链表。8.空循环链表仅由一个自成循环的头结点表示。prior data next ,形成的链表中有两条不同方向的链称为双链表。10.双链表的特点是找结点的前驱和后继都很容易。11.顺序表和链表的比较1)基于空间的考虑:顺序表的存储空间是静态分配的,链表的存储空间是动态分配的。顺序表的存储密度比链表大。因此,在线性表长度变化不大,易于事先确定时,宜采用顺序表作为存储结构。2)基于时间的考虑:顺序表是随机存取结构,若线性表的操作主要是查找,很少有插入、删除操作时,宜用顺序表结构。对频繁进行插入、删除操作的线性表宜采用链表。若操作主要发生在表的首尾时采用尾指针

8、表示的单循环链表。1. 栈是限制仅在表的一端进行插入和删除运算的线性表又称为后进先出表(LIFO表)。插入、删除端称为栈顶,另一端称栈底。表中无元素称空栈。2. 栈的基本运算有:(1)初始化Initstack(s),加工型运算,构造一个空栈。(2)进栈Push(S,X),加工型运算,将元素X插入栈S中,是X成为栈S的栈顶元素。(3)退栈Pop(s),加工型运算,当栈不为空时,将栈顶元素赋给X,并从栈中删除当前栈顶。(4)读栈顶Top(s),引用型运算,若栈S不空,由X返回栈顶元素;当栈S为空时,结果为一个特殊标志。(5)判栈空Empty(s), 引用型运算,若栈S为空栈,则结果为1,否则结果为

9、0. 3. 顺序栈:栈的顺序存储结构称顺序栈。4. .当栈满时,做进栈运算必定产生空间溢出,称“上溢”。当栈空时,做退栈运算必定产生空间溢出,称“下溢”。上溢是一种错误应设法避免,下溢常用作程序控制转移的条件。5. 在顺序栈上的基本运算:1)置空栈。Void initstack(seqstack *s) s-top=-1;2)判栈空。int stackempty(seqstack *s) return s-top=-1;3)判栈满。int stackfull(seqstack *s) top=stacksize-1;4)进栈。Void push(seqstack *s,datatype x)

10、if(stackfull(s) error(“stack overflow”);data+s-top=x;5)退栈。Datatype pop(seqstack *s) if(stackempty(s) error(“stack underflow”);return S-datas-top-;6)取栈顶元素。Dtatatype stacktop(seqstack *s) top;6. 链栈:栈的链式存储结构称链栈。栈顶指针是链表的头指针。7.链栈上的基本运算:1)建栈。Void initstack(linkstack *s) top=NULL;Int stackempty (linkstack

11、*s) top=NULL;3) 进栈。Void push(linkstack *s,datatype x) stacknode *p=(stacknode *)malloc(sizeof(stacknode);next=s-top;top=p;4) 退栈。Datatype pop(linksatck *s) datatype x;stacknode *p=s-x=p-data;top=p-free(p);return x;5) 取栈顶元素。Datatype stacktop(linkstack *s) error(“stack is empty”);top-8. 队列是一种运算受限的线性表,允

12、许删除的一端称队首,允许插入的一端称队尾。队列又称为先进先出线性表,FIFO表。9. 队列的基本运算:1)初始化 InitQueue(Q),加工型运算,设置一个空队列Q。2)入队列 EnQueue(Q,X),加工型运算,将X插入到队列Q的队尾。3)出队 OutQueue(Q,X),加工型运算,若队列Q不为空,则将队头元素赋给X,并删除队头结点,而该结点的后继成为新的队头结点。4)判队列空 EmptyQueue(Q),引用型运算,若队列Q为空,则返回的值为1,否则为0。5)读队头 GetHead(Q,x),引用型运算,Q不空时由参数X返回队头结点的值,否则给一特殊标志。10.顺序队列:队列的顺序

13、存储结构称顺序队列。设置front和rear指针表示队头和队尾元素在向量空间的位置。11.顺序队列中存在“假上溢”现象,由于入队和出队操作使头尾指针只增不减导致被删元素的空间无法利用,队尾指针超过向量空间的上界而不能入队。12.为克服“假上溢”现象,将向量空间想象为首尾相连的循环向量,存储在其中的队列称循环队列。i=(i+1)%queuesize 13.循环队列的边界条件处理:由于无法用front=rear来判断队列的“空”和“满”。解决的方法有:1)另设一个布尔变量以区别队列的空和满;2)少用一个元素,在入队前测试rear在循环意义下加1是否等于front;3)使用一个记数器记录元素总数14

14、. 链队列:队列的链式存储结构称链队列,链队列由一个头指针和一个尾指针唯一确定。15. .链队列的基本运算:1)入队。Void enqueue(linkqueue *q,datatype x) queuenode *p=(queuenode *)malloc(sizeof(queuenode);next=NULL;if(queueempty(q) q-front=q-rear=p;q-rear-next=p;2)出队。Datatype dequeue(linkqueue *q) queuenode *p;error(“queue is underflow”);p=q-front;front=p

15、-if(q-rear=p) rear=NULL;1. 串:是由零个或多个字符组成的有限序列;包含字符的个数称串的长度;2. 空串:长度为零的串称空串;空白串:由一个或多个空格组成的串称空白串;子串:串中任意个连续字符组成的子序列称该串的子串;主串:包含子串的串称主串;子串的首字符在主串中首次出现的位置定义为子串在主串中的位置;3. 空串是任意串的子串;任意串是自身的子串;串常量在程序中只能引用但不能改变其值;串变量取值可以改变;4. 串的基本运算(1)赋值ASSIGN(S,T),加工型运算,将串T的值传给串变量S。(2)判等EQUAL(S,T),引用型运算,若S和T 的值相等则返回值为1,否则

16、返回值为0. (3)求长LENGTH(S),引用型运算,求串的长度。(4)联接CONCAT(S,T),引用型运算,运算结果为由S和T联接在一起形成的新串。(5)求子串SUBSTR(S,i,j),引用型运算,其结果是串S中从第i个字符开始的,由连续j个字符组成的子串。(6)插入INSERT(S1,i,S2),加工型运算,作用是将串S2整个插入到串S1的第i个字符之后从而产生的一个新串。(7)删除DELETE(S,I,j),加工新运算,作用是从串S中删去从第i个字符开始的长度为j的子串。(8)定位INDEX(S,T),引用型运算,若在串S中存在一个于T相等的子串,则本运算的结果为S中第一个这样的子

17、串中的第一个字符在S中的位置;否则,结果为0. (9)替换REPLACE(S,T,R),加工型运算,结果是在串S中处处同时以串R置换串T的所有出现所得的新串。5. 串的存储结构:(1)串的顺序存储(2)串的链接存储1. 多维数组:一般用顺序存储的方式表示数组。2. 数组的逻辑结构是线性结构的推广。3. 数组的基本运算是:(1)读:给定一组下标,读取相应的数据元素;(2)写:给定一组下标,修改相应的数据元素。4. 矩阵的压缩存储:值相同的多个元素只分配一个存储空间,零元素不分配空间。(1)特殊矩阵:值相同的元素或零元素在矩阵中分布有一定的规律的矩阵。1)对称矩阵:在一个n阶的方阵A中,元素满足A

18、ij=Aji 1=i,j1,则X的双亲的编号为i/2. 2).若2in,则结点X无左孩子(且无右孩子);否则,X的左孩子的编号为2i。3).若2i+1n,则结点X无右孩子;否则,X的右孩子编号为2i+1。19.二叉树中某一结点的左子树深度减去右子树的深度,称为该结点的平衡因子。20.二叉树的存储结构(1)链式存储结构:二叉链表结点的结构为:l lchild | data | rchild ;二叉链表由根指针唯一确定。(2)顺序存储结构:把一棵有n个结点的完全二叉树,从树根起自上而下、从左到右对所有结点编号,然后依次存储在一个一维数组b0n中,b1n存放结点,b0存放结点总数。各个结点编号间的关

19、系:1)i=1是根结点;i1则双亲结点是i/2取整;2)左孩子是2i, 右孩子是2i+1;(要小于n)3)i(n/2取整)的结点是叶子;4)奇数没有右兄弟,左兄弟是i-1;5)偶数没有左兄弟,右兄弟是i+1;21.二叉树的遍历:就是按某种次序系统的“访问”二叉树上的所有结点,是每个结点恰好被“访问”一次。22. 二叉树的遍历方式有:前序遍历、中序遍历、后序遍历。23.树的存储结构:(1)孩子链表表示法是树的一种链式存储结构。1)孩子链表表示法的思想是:树上的一个结点的内容以及指向该结点所有的孩子的指针存储在一起以便于运算的实现。2)一个孩子链表是一个带头结点的单链表,单链表的头结点含有两个域:

20、数据域和指针域。(以图1为例)数据域指针域孩子域指针域(2)孩子兄弟链表表示法:(3).双亲表示法:24.森林通常定义为树的集合。25. 树、森林与二叉树的转换(1)树与二叉树的转换:1)所有兄弟间连线;2)保留与长子的连线,去除其它连线。该二叉树的根结点的右子树必为空(2)森林与二叉树的转换:1)将所有树转换成二叉树;2)将所有树根连线。26. 树和森林的遍历:前序遍历一棵树等价于前序遍历对应二叉树;后序遍历等价于中序遍历对应二叉树。27.从树中一个结点到另一个结点之间的分支,构成这两个节点之间的路径;路径上的分支的数目称为路径的长度。28.结点上赋一个有实际意义的实数,称此实数为根结点的权。29.从根结点到根结点之间的路径长度于根结点上权的积称为结点的带权路径长度。30.树中所有叶子结点的带权路径长度之和记做树的带权路径长度。31.n个带权叶子结点构成的所有二叉树中,带权路径长度最小的二叉树称为哈夫曼树(HuFFman),又叫最优二叉树。32.对字符集进行编码时,字符集中任一个编码都不是其他字符的编码的前缀,称为前缀码。1. 图:图G由两个集合V和E组成,记作G=(V,E),其中V是顶点的有穷非空集合,E是边的集合,而边是V中顶点的偶

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1