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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构c语言版复习知识点.docx

1、数据结构c语言版复习知识点数据结构(c语言版)复习知识点2017第一章 绪论1.1数据、数据元素、数据项、数据结构等基本概念1.数据(data):客观事物的符号表示,在计算机科学中指所有能输入计算机中并被计算机处理的符号总称。整数、浮点数、字符串、声音、图像。2.数据元素(dataelement):数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。3.一个数据元素可能由若干个数据项(dataitem)组成。数据元素是一个数据整体中相对独立的单位。但它还可以分割成若干个具有不同属性的项(字段)。故不是组成数据的最小单位。数据项是构成数据的最小单位。4.数据对象(dataobject)

2、:性质相同的数据元素的集合,是数据的一个子集。5.数据结构(datastructure):数据元素以及数据元素之间存在的关系。6.数据结构主要描述:数据元素之间的逻辑关系、数据在计算机系统中的存储方式和数据的运算,即数据的逻辑结构、存储结构和数据的操作集合1.2数据结构的逻辑结构、存储结构的含义及其相互关系1.数据的逻辑结构:用形式化方式描述数据元素间的关系。数据的逻辑结构独立于计算机,是数据本身所固有的。用于算法的设计。两大类逻辑结构:线性结构(线性表、栈、队列、数组和串),非线性结构(树和图)。2.数据的物理结构(也称存储结构):数据在计算机中的具体表示。包括数据元素的表示和关系的表示。存

3、储结构是逻辑结构在计算机存贮器中的映像,必须依赖于计算机。用于算法的实现。数据的存储方式可分为如下两类:顺序存储、链接存储。1.3算法1.算法的定义:算法是对特定问题求解步骤的一种描述,是指令的有限序列。2.算法的特性:有穷性算法必须在执行有穷步之后结束,而且每一步都可在有穷时间内完成确定性每条指令无二义性。并且,相同的输入只能得到相同的输出;可行性算法中描述的每一操作,都可以通过已实现的基本运算来实现。输入算法有零至多个输入。输出算法有一个至多个输出3.算法效率的度量:时间复杂度和空间复杂度及计算。第二章 线性表2.1线性表的逻辑结构特征存在唯一的一个被称作第一个的数据元素;存在唯一的一个被

4、称作最后一个的数据元素;除第一个元素之外,集合中的每个数据元素均只有一个前驱;除最后一个元素之外,集合中的每个数据元素均只有一个后继。2.2线性表的顺序存储结构1.用一组连续的存储单元依次存储线性表的数据元素。在线性表的顺序存储表示中,只要确定了线性表的起始位置,线性表中任一数据元素都可随机存取。线性表的顺序存储结构是一种随机存取的存储结构。LOC(ai+1)=LOC(ai)+1LOC(ai+1)=LOC(a1)+i*1LOC(ai)表示元素ai的存储位置;LOC(a1)表示第一个数据元素的存储位置,通常称为线性表的起始位置或基地址每个数据元素占用1个存储单元。2.线性顺序表上的插入是指在第i

5、(1in+1)个位置插入一个新的数据元素,需将第i至第n共(n-i+1)个元素后移注意:顺序表中数据区域有listSize个存储单元,所以在向顺序表中做插入时先检查表空间是否满了,在表满的情况下不能再做插入,否则产生溢出错误。要检验插入位置的有效性,这里i的有效范围是:1=i=n+1,其中n为原表长。注意数据的移动方向算法时间复杂度移动元素个数:n-i+1平均移动元素个数:n/2T(n)=O(n);3.线性顺序表上的删除是指第i(1in)个数据元素删除掉,需将第i+1至第n共(n-i)个元素前移注意:删除第i个元素,i的取值为1=inext=p-next;p-next=s;return OK;

6、6.在单链表中删除数据元素P-next=P-next-next; 或q=p-next;p-next=q-next;free(q);StatuslistDelete_L(LinkList&L,inti)p=L;j=0;while(p-next&jnext;+j;if(!(p-next) ji-1)return ERROR;/删除位置不合理q=p-next;p-next=q-next;free(q);/删除并释放结点return OK;/ListDelete_L7.循环链表:表中最后一个结点的指针域指向头结点,整个链表形成一个环。循环链表的操作和单链表基本一致,差别仅在于,判别链表中最后一个结点的

7、条件不再是后继是否为空,而是后继是否为头结点。(1)单链表p或p-next=NULL(2)循环链表p-next=L8.双向链表有两个指针域,一个指向直接前驱,一个指向直接后继。1)向双向链表中插入一个结点:s-prior=p-prior;p-prior-next=s;s-next=p;p-prior=s;2)向双向链表中插入一个结点:s-prior=p;s-next=p-next;p-next-prior=s;p-next=s;3)从双向链表中删除一个结点p-prior-next=p-next;p-next-prior=p-prior;第三章 栈和队列3.1栈和队列的逻辑结构特征1.栈(sta

8、ck)和队列(queue)是两种重要的线性结构,特殊性在于其基本操作是线性表操作的子集,是操作受限的线性表(操作限定在两个端点进行),为具有限定性的数据结构。栈按“后进先出”的规则进行操作,队列按“先进先出”的规则进行操作。2.栈是限定在表尾进行插入和删除操作的线性表。允许插入,删除的一端称为栈顶(top),另一端称为栈底(bottom)。3.栈的基本运算主要有两个:Push(S,e),进栈,插入(压入)元素e为新的栈顶元素,Pop(S),出栈,删除(弹出)S的栈顶元素。如:若元素入栈的顺序为1234,为了得到1342出栈顺序,操作序列为:Push(S,1),Pop(S),Push(S,2),

9、Push(S,3),Pop(S),Push(S,4),Pop(S),Pop(S)。3.2栈的顺序存储结构1.顺序栈:利用一组地址连续的存储单元一次存放从栈底到栈顶的数据元素,用指针top指示栈顶元素在顺序栈中的位置。top指向栈顶元素的下一个位置top指向栈顶元素初始化:S.top=S.baseS.top=S.base-1判栈空:S.base=S.topS.base=S.top-1入栈:*s-top+=e(先压后加)*+s-top=e(先加后压)栈满:S.top-S.base=S.stacksizeS.top-S.base=S.stacksize-1出栈:e=*-S.top(先减后弹)e=*S

10、.top-(先弹后减) 入栈时,首先判栈是否满了,栈满的条件为:S.top-S.base=S.stacksize,栈满时,不能入栈;否则出现空间溢出,引起错误,这种现象称为上溢。 出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空时常作为一种控制转移的条件。2.用数组的索引值表示栈底和栈顶top指向栈顶元素的下一个位置top指向栈顶元素初始化:top=0top=-1判栈空:top=0top=-1入栈:vtop+=x(先压后加)v+top=x(先加后压)栈满:top-base=stacksize;top-base=stacksize-1;出栈:y=v-top)(先减后弹

11、)y=vtop-)(先弹后减)3.两栈共享空间:top0表示第一个栈的栈顶;top1表示第二个栈的栈顶栈空:top0=-1;top1=n入栈:a+top0=e;a-top1=e栈满:top0+1=top1出栈:e=atop0-;e=atop1+4.关于顺序栈的说明:入栈时,首先判栈是否满了,栈满时,不能入栈;否则出现空间溢出,引起错误,这种现象称为上溢。出栈和读栈顶元素操作,先判栈是否为空,为空时不能操作,否则产生错误。通常栈空时常作为一种控制转移的条件。3.3栈的顺序链式存储入栈:p=newLNode;/建新的结点if(!p)exit(1);/存储分配失败p-data=e;p-next=S-

12、top;/链接到原来的栈顶S-top=p;/移动栈顶指针出栈:if(!S-top)returnNULL;elsee=S-top-data;/返回栈顶元素q=S-top;S-top=S-top-next;/修改栈顶指针free(q);/释放被删除的结点空间return e;3.4栈的应用举例1.数制转换#defineNUM 10voidconversion(intN,intr)int sNUM,top; /*定义一个顺序栈*/int x;top=-1; /*初始化栈*/while(N)s+top=N%r;/*余数入栈*/N=N/r; /*商作为被除数继续*/while(top!=-1)x=sto

13、p-;printf(“%d”,x);2.括号匹配的检验:3.表达式求值:熟悉前缀、中缀和后缀表达式,表达式求值时栈的状态变化。4.栈与递归的实现:熟悉使用递归解决3.5队列的逻辑结构特征队列:只允许在一端进行插入,而在另一端删除元素。允许插入的一端为队尾(rear),允许删除的一端为队头(front)。3.6队列的顺序存储结构1.循环队列的顺序存储结构:队列存放数组被当作首尾相接的表处理。队头、队尾指针加1时用语言的取模(余数)运算实现。队列初始化:front=rear=0;队空条件:front=rear;队满条件:(rear+1)%MAXQSIZE=front队头指针进1:front=(fr

14、ont+1)%MAXQSIZE;队尾指针进1:rear=(rear+1)%MAXQSIZE;队中元素个数:(rear-front+MAXQSIZE)%MAXQSIZE2.链式队列:进队:p=(QueuePtr)malloc(sizeof(QNode);if(!p)return0;/存储分配失败p-data=e; p-next=NULL;Q-rear-next=p; Q.rear=p;出队:if(Q-front=Q-rear) returnNULL;p=Q-front-next; e=p-data;Q-front-next=p-next;if(Q-rear=p) Q-rear=Q-front;f

15、ree(p); returne;第四章 串、数组和广义表4.1串相关术语串即字符串,是由零个或多个字符组成的有限序列,是数据元素为单个字符的特殊线性表。串长:串中字符个数(n0).n=0时称为空串 。空白串:由一个或多个空格符组成的串。子串:串s中任意个连续的字符序列叫s的子串;s叫主串。子串位置:子串的第一个字符的序号。字符位置:字符在串中的序号串相等:串长度相等,且对应位置上字符相等。串的逻辑结构和线性表极为相似,区别仅在于串的数据对象约束为字符集;串的基本操作和线性表有很大差别。在线性表的基本操作中,大多以“单个元素”作为操作对象;在串的基本操作中,通常以“串的整体”作为操作对象。4.2

16、串的基本操作熟悉以下操作的意义:StrAssign(&T,chars)StrCopy(&T,S)DestroyString(&S)StrEmpty(S)StrCompare(S,T)StrLength(S)Concat(&T,S1,S2)SubString(&Sub,S,pos,len)Index(S,T,pos)Replace(&S,T,V)StrInsert(&S,pos,T)StrDelete(&S,pos,len)ClearString(&S)4.3数组1.二维数组的顺序存储结构及地址计算方式。设一般的二维数组是Ac1.d1,c2.d2,这里c1,c2不一定是0。L:单个元素长度则行优

17、先存储时的地址公式为:LOC(aij)=LOC(c1,c2)+(i-c1)*(d2-c2+1)+(j-c2)*L二维数组列优先存储的通式为:LOC(aij)=LOC(ac1,c2)+(j-c2)*(d1-c1+1)+(i-c1)*L2.对称矩阵的压缩存储:在对称矩阵中,只需存储对称矩阵的下半部分。所需空间数为:n(n+1)/2。设一般的二维数组是Ac1.d1,c2.d2,这里c1,c2不一定是0,对应一维存储空间SA的起始值是C3。则行优先存储时的地址公式为: 3.三角矩阵:若n阶方阵中下(上)三角(不包括对角线)中的元均为常量c或0,则称为上(下)三角矩阵;下三角矩阵:主队角线以上均为同一个

18、常数;上三角矩阵,主队角线以下均为同一个常数。与对称矩阵类似,不同之处在于存完下三角中的元素之后,紧接着存储对角线上方的常量,因为是同一个常数,所以存一个即可,这样一共存储了n*(n+1)/2+1个元素,设存入数组:SAn*(n+1)/2+1中,这种的存储方式可节约n*(n-1)/2个存储单元。4.理解下、上三角矩阵:SAk与ai,j的对应关系。5.稀疏矩阵:将每个非零元素用一个三元组(i,j,aij)来表示,将三元组按行优先的顺序,同一行中列号从小到大的规律排列成一个线性表,称为三元组表,每个稀疏矩阵可用一个三元组表来表示。4.4广义表1.广义表是递归定义的线性结构,是线性表的推广,也称为列

19、表(lists)记为:LS=(1,2,.,n)。2.广义表与线性表的区别和联系:广义表中元素既可以是原子类型,也可以是列表;当每个元素都为原子且类型相同时,就是线性表。3.广义表LS=( 1, 2, n)的的性质:1)广义表中的数据元素有相对次序;2)广义表的长度定义为最外层包含元素个数;3)广义表的深度定义为所含括弧的最大重数;注意:“原子”的深度为0;“空表”的深度为14)广义表是一种多层次的数据结构。广义表的元素可以是单元素,也可以是子表,而子表的元素还可以是子表,。5)广义表可以是递归的表。广义表的定义并没有限制元素的递归,即广义表也可以是其自身的子表。6)广义表可以为其他表所共享。7

20、) 任何一个非空广义表LS=( 1, 2, n)均可分解为:表头 Head(LS)=1和表尾Tail(LS)=( 2, n) 两部分.任何一个非空表,表头可能是原子,也可能是列表;但表尾一定是列表4.广义表的基本运算:广义表有两个重要的基本操作,即取头操作(Head)和取尾操作(Tail)。要熟悉这个两个操作,正确给出一个广义表的这两个操作的结果。第五章 树及二叉树5.1树结构及基本概念1.树具有下面两个特点:树的根结点没有前驱结点,除根结点之外的所有结点有且只有一个前驱结点。树中所有结点可以有零个或多个后继结点。2.基本术语:结点(node): 表示树中的元素,包括数据项及若干指向其子树的分

21、支结点的度(degree):结点拥有的子树数称为叶子(leaf):度为0的结点孩子(child): 结点子树的根称为该结点的孩子双亲(parents): 孩子结点的上层结点兄弟(sibling): 同一双亲的孩子树的度: 一棵树中最大的结点度数结点的层次(level): 从根结点算起,根为第一层,它的孩子为第二层深度(depth): 树中结点的最大层次数森林(forest): m(m 0)棵互不相交的树的集合5.2二叉树结构1.定义:二叉树是n(n 0)个结点的有限集,它或为空树(n=0),或由一个根结点和两棵分别称为左子树和右子树的互不相交的二叉树构成2.特点:每个结点至多有二棵子树(即不存

22、在度大于2的结点)二叉树的子树有左、右之分,且其次序不能任意颠倒3.基本形态:五种4.二叉树的性质性质1:在二叉树的第i层上至多有2i-1个结点。性质2:深度为k的二叉树,至多有2k-1个结点。性质3:对任意二叉树BT,若叶结点数为n0,度为2的结点数为n2,则:n0=n2+1性质4:具有n个结点的完全二叉树的深度为 log2n 1性质5:如果对一棵有n个结点的完全二叉树的结点按层序编号,则对任一结点i(1 i n),有: 1)如果i=1,则结点i是二叉树的根,无双亲;如果i1,则其双亲是结点 i/2 2)如果2in,则结点i无左孩子;如果2i n,则其左孩子是结点2i3)如果2i+1n,则结

23、点i无右孩子;如果2i+1 n,则其右孩子是结点2i+15.几种特殊形式的二叉树:满二叉树:一棵深度为k且有2k 1个结点的二叉树称为特点:每一层上的结点数都是最大结点数完全二叉树:深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉树中编号从1至n的结点一一对应时,称为特点:叶子结点只可能在层次最大的两层上出现;对任一结点,若其右分支下子孙的最大层次为l,则其左分支下子孙的最大层次必为l或l+15.3二叉树存储1.二叉树的顺序存储结构:按满二叉树的结点层次编号,依次存放二叉树中的数据元素特点:结点间关系蕴含在其存储位置中;浪费空间,适于存满二叉树和完全二叉树2.二叉树的链式存

24、储结构(二叉链表):在n个结点的二叉链表中,有n+1个空指针域3.二叉树的链式存储结构(三叉链表)5.4二叉树遍历1.二叉树的遍历:先序遍历(DLR):先访问根结点,然后分别先序遍历左子树、右子树中序遍历(LDR):先中序遍历左子树,然后访问根结点,最后中序遍历右子树后序遍历(LRD):先后序遍历左、右子树,然后访问根结点2.遍历的递归算法:voidpreOrder(bt)/*先序遍历二叉树bt*/if(bt)/*递归调用的结束条件为bt为空*/visit(bt-data);/*访问结点的数据域*/preorder(bt-lchild);/*先序递归遍历bt的左子树*/preorder(bt-

25、rchild);/*先序递归遍历bt的右子树*/voidinOrder(bt)/*中序遍历二叉树bt*/if(bt)/*递归调用的结束条件为bt为空*/inOrder(bt-lchild); /*中序递归遍历bt的左子树*/visit(bt-data); /*访问结点的数据域*/inOrder(bt-rchild); /*中序递归遍历bt的右子树*/void postOrder(bt)/*后序遍历二叉树bt*/if(bt)/*递归调用的结束条件为bt为空*/postOrder(bt-lchild);/*后序递归遍历bt的右子树*/postOrder(bt-rchild);/*后序递归遍历bt的

26、右子树*/visit(bt-data); /*访问结点的数据域*/5.5线索二叉树1.线索二叉树的定义前驱与后继:在二叉树的先序、中序或后序遍历序列中两个相邻的结点互称为线索:指向前驱或后继结点的指针称为线索二叉树:加上线索的二叉链表表示的二叉树叫线索化:对二叉树按某种遍历次序使其变为线索二叉树的过程叫2.线索二叉树的实现在有n个结点的二叉链表中必定有n+1个空链域。在线索二叉树的结点中增加两个标志域ltag :若ltag=0,lchild域指向左孩子;若ltag=1,lchild域指向其前驱rtag :若rtag=0,rchild域指向右孩子;若rtag=1,rchild域指向其后继3.在中

27、序线索二叉树中找结点后继的方法rt=1,则rc域直接指向其后继rt=0,则结点的后继应是其右子树的左链尾(lt=1)的结点4.在中序线索二叉树中找结点前驱的方法:lt=1,则lc域直接指向其前驱lt=0,则结点的前驱应是其左子树的右链尾(rt=1)的结点5.6树和森林1.树和森林与二叉树之间的转换方法: 孩子兄弟表示法5.7赫夫曼树1.赫夫曼树(Huffman)带权路径长度最短的树2.赫夫曼算法1)根据给定的n个权值构成n棵二叉树的集合F,其中每棵二叉树中只有一个带权值的结点;2)在F中选取两棵根结点的权值最小的树作为左右子树构造一棵新的二叉树,且置新的二叉树的根结点的权值为其左、右子树上根结

28、点的权值之和;3)在F中删除这两棵树,同时将新得到的二叉树加入到F中;4)重复2)和3),直到F中只含一棵树为止3.Huffman编码:数据通信用的二进制编码1)思想:根据字符出现频率编码,使电文总长最短2)编码:根据字符出现频率构造Huffman树,然后将树中结点引向其左孩子的分支标“0”,引向其右孩子的分支标“1”;每个字符的编码即为从根到每个叶子的路径上得到的0、1序列3)译码:从Huffman树根开始,从待译码电文中逐位取码。若编码是“0”,则向左走;若编码是“1”,则向右走,一旦到达叶子结点,则译出一个字符;再重新从根出发,直到电文结束第六章 图6.1图的术语图的常用术语及含义:有向

29、图、无向图、完全图、有向完全图、稀疏图、稠密图、网、邻接点、路径、简单路径、回路或环、简单回路、连通、连通图、强连通图、生成树。用n表示图中顶点数目,用e表示图中边或弧的数目:0e*n(n-1)(无向图),0en(n-1)(有向图)6.2图的邻接矩阵存储表示1.图的数组(邻接矩阵)存储表示2.图的邻接矩阵存储方法具有以下特点:(1)无向图的邻接矩阵一定是一个对称矩阵。因此,在具体存放邻接矩阵时只需存放上(或下)三角矩阵的元素即可。(2)对于无向图,邻接矩阵的第i行(或第i列)非零元素的个数正好是第i个顶点的度TD(vi)。(3)对于有向图,邻接矩阵的第i行(或第i列)非零元素的个数正好是第i个顶点的出度OD(vi)(或入度ID(vi))。3.图的邻接矩阵存储方法的优点:用邻接矩阵方法存储图,很容易确定图中任意两个顶点之间是否有边相连4

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

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