数据结构期末考点总结.pdf
《数据结构期末考点总结.pdf》由会员分享,可在线阅读,更多相关《数据结构期末考点总结.pdf(17页珍藏版)》请在冰豆网上搜索。
![数据结构期末考点总结.pdf](https://file1.bdocx.com/fileroot1/2022-10/19/3c70f0bd-b124-4d9f-8594-505e4ee511e3/3c70f0bd-b124-4d9f-8594-505e4ee511e31.gif)
第一章第一章绪论绪论数据所有输入计算机中并被计算机处理的符号。
数据元素数据的基本单位,通常作为一个整体。
数据对象性质相同的数据元素的集合。
数据结构数据元素以及之间存在的关系。
1、线性结构;2、集合结构3、树形结构;4、图结构数据结构的形式定义:
Data-Structure=(D,S)D数据元素集合S关系集合数据的逻辑结构用形式化方式描述数据元素间的关系。
数据的物理结构数据在计算机中的具体表示。
数据类型一种数据结构和定义在其上的一组操作。
可以形式化定义为:
Data-Type=(D,S,P)算法的定义是对特定问题求解步骤的一种描述,是指令的有限序列。
算法的特性有穷性算法必须在执行有穷步之后结束,而且每一步都可在有穷时间内完成。
确定性每条指令无二义性。
可行性算法中描述的每一操作,都可以通过已经实现的基本运算来实现。
输入算法有零至多个输入。
输出算法有一个至多个输出。
时间复杂度的等级O
(1)O(logn)O(n)O(nlogn)O(n2)O(nK)O(Xn)第二章第二章线性表线性表重点:
1、链式和线性表两种方式的插入与删除2、单双链表的定义线性表的定义#defineList-Init-Size100#defineListincrement10typedefstructElemtype*elem;intlength;intlistsize;Sqlist;线性表定位插入StatusListinsert_Sq(Sqlist&L,inti,Elemtypee)if(iL.length+1)returnERROR;if(L.length=L.listsize)newbase=追加分配新空间L.elem=newbase;L.listsize+=Listincrement;for(j=L.length-1;j=i-1;-j)L.elemj+1=L.elemj);L.elemi-1=e;+L.length;returnOK;线性表定位删除StatusListdelete_Sq(Sqlist&L,inti,Elemtype&e)if(iL.length)returnERROR;e=L.elemi-1);for(j=i;jL.length;+j)L.elemj-1=L.elemj);-L.length;returnOK;单链表定义:
typedefstructLnodeElemtypedata;structLnode*next;Lnode,*Linklist;链式定位插入StatusListinsert_L(Linklist&L,inti,Elemtypee)p=L;j=0;while(p&jnext;+jif(!
pji-1)returnERROR;new(s);s-data=e;s-next=p-next;p-next=s;returnOK;链式定位删除StatusListdelete_L(Linklist&L,inti,Elemtype&e)p=L;j=0;while(p-next&jnext;+jif(!
(p-next)ji-1)returnERROR;q=p-next;p-next=q-next;e=q-data;free(q);returnOK;双向链表结点的存储结构定义typedefstructDublnodeElemtypedata;structDublnode*prior;structDublnode*next;Dublnode,*Dublinklist;了解:
有序表的合并voidMergelist_L(Linklist&La,Linklist&Lb,Linklist&Lc)pa=La-next;pb=Lb-next;Lc=pc=La;while(pa&pb)if(pa-datadata)pc-next=pa;pc=pa;pa=pa-next;elsepc-next=pb;pc=pb;pb=pb-next;pc-next=pa?
pa:
pb;free(Lb);第三章第三章、栈与队列、栈与队列重点:
1、栈的插入,删除,和取栈顶2、队列的取对头,插入,删除(循环队列)栈的存储结构定义:
#defineStack_init_size100;#defineStackincrement10;typedefstructSelemtype*base;指向第一个元素(有数)Selemtype*top;指向最后一个元素的下一位(为空)intstacksize;Sqstack;栈的取栈顶StatusGettop(Sqstacks,Selemtype&e)if(s.top=s.base)returnERROR;e=*(s.top-1);returnOk栈的插入StatusPush(Sqstack&s,Selemtypee)if(s.top-s.base=s.stacksize)s.base=追加分配空间;s.stacksize+=Stackincrement;*s.top+=e;returnOk栈的删除栈顶StatusPop(Sqstack&s,Selemtype&e)if(s.top=s.base)returnERROR;e=*-s.topreturnOk队列的顺序存储表示与实现typedefstructQelemtype*base;intfront;指向第一个元素(有数)intrear;指向最后一个元素的下一位(为空)Sqqueue;队空条件:
Q.front=Q.rear队满条件:
(Q.rear+1)%Maxsize=Q.front队列长度:
(Q.rear-Q.front+Maxsise)%Maxsize队的插入:
StatusEnqueue(sqqueue&Q,Qelemtypee)if(Q.rear+1)%Maxsize=Q.front)returnERROR;Q.baseQ.rear=e;Q.rear=(Q.rear+1)%Maxsize;returnOK;队的删除StatusDequeue(sqqueue&Q,Qelemtype&e)if(Q.front=Q.rear)returnERROR;e=Q.baseQ.front;Q.front=(Q.front+1)%Maxsize;returnOK;取对头StatusGetHead(sqqueue&Q,Qelemtype&e)if(Q.front=Q.rear)returnERROR;returnQ.baseQ.front;第四章第四章串串重点:
串的比较、连接,了解串的插入,删除定义typedefstructchar*ch;intlength;Hstring;比较statusstrcompare(S,T)for(i=0;iS.length&i=j)或k=j(j+1)/2+i(i1则双亲为parent(i)=i/2;
(2)若2in则i无孩子,为叶结点否则lchild(i)=2i;ijkl(3)若2i+1n则i无右孩子否则rchild(i)=2i+1。
遍历的访问顺序有三种:
1先序访问:
根左子树右子树2中序访问:
左子树根右子树3后序访问:
左子树右子树根递归遍历:
中序Voidinorder(bt)if(bt)inorder(bt-lchild);visit(bt-data);inorder(bt-rchild);先序Voidpreorder(bt)if(bt)visit(bt-data);preorder(bt-lchild);preorder(bt-rchild);后序Voidpostorder(bt)if(bt)postorder(bt-lchild);postorder(bt-rchild);visit(bt-data);树的存储结构(书上P135)1双亲表示法:
用一组连续的空间存放结点,每个结点用一个域表示该结点的双亲.2孩子表示法:
(1)多叉链表表示法
(2)多重线性链表表示法:
把每个结点的孩子组成一个线性链表.3孩子兄弟表示法:
用二叉树的左指针指向该结点的第一个孩子,右指针指向该结点的下一个兄弟.123456先序:
124536中序:
425136后序:
452631例如:
哈夫曼树(最优二叉树)概念路径:
从一结点到另一结点上的分支路径长度:
路径上的分支数目树的路径长度:
从根到所有结点的路径长度之和结点的带权路径长度:
从该结点到树根之间的路径长度与结点上权值的乘积.树的带权路径长度:
树中所有叶子结点的带权路径长度之和.定义:
设有n个权值w1,w2,.wn,任意构造有n个叶结点的二叉树,每个叶结点权值为wi。
则其中带权路径长度最小的二叉树称为哈夫曼树(最优二叉树)。
构造方法
(1)根据给定的w1,w2,.wn,生成n棵树的森林,F=T1,T2,.Tm;根结点值为权值;
(2)在F中选择两棵根结点值最小的树Ti,Tj作为左右子树,构成一棵新二叉树Tk,Tk根结点值为Ti,Tj根结点权值之和;(3)在F中删除Ti,Tj,并把Tk加到F中;(4)重复
(2)(3),直到F中只含一棵树。
树的遍历1先根访问先访问根,然后依次访问子树.2后根访问先依次访问子树,然后访问根.ABCDEFGIJHtree例如:
先根访问:
ABEFCGDHIJ后根访问:
EFBGCHIJDA第七章第七章图图重点:
图的定义,数组表示法,邻接表表示法深度优先遍历,广度优先遍历,生成树图的定义:
Graph=(V,E),V为顶点集;E为边集。
若E为有向边,称为有向图;若E为无向边,称为无向图。
边一般由顶点对表示:
;若为有向边,则称vi为尾,vj为头.有向边也可以表示为:
vivj无向完全图:
如果在无向图G中,任何两顶点都有一条边相连,边的数目为:
n(n-1)/2有向完全图:
如果在有向图G中,任何两顶点都有两条方向相反的边相连,边的数目为:
n(n-1)连通图:
无向图中,任意两点Vi,Vj都有路径相连,称该无向图为连通图.连通分量:
无向图中极大连通子图.数组(矩阵)表示法:
设G=(V,E)V=V1,V2,.VnAi,j=1若E,ij0否则A为一nn矩阵,称为G的邻接矩阵若G=(V,E)为网,则邻接矩阵可以表示为:
数组表示法定义:
示例:
W=1,2,3,4,51563213459w1w2w3w4w51F=1,2,3,4,52F=3,3,4,53F=6,4,54F=6,95F=15Ai,j=Wij若E,ij0否则#defineMax_V_num20/最大顶点数typedefenumDG,DN,UDG,UDNGraphkind;/有向无向图网typedefstruct/图结构VextypevexsMax_V_num;/顶点数组ArctypearcsMax_V_numMax_V_num;/边矩阵/0,1或权值wijintvexnum,arcnum;/顶点数,边数Graphkindkind;/图种类graph邻接表表示法:
每个顶点用一个链表表示(P164)#defineMax_V_num20/最大顶点数typedefstructArcnode/边结点类型intvjpos;/vj的位置structArcnode*nextarc;Arcnode;typedefstructVnode/顶点结点类型vextypedata;Arcnode*firsttarc;Vnode,AdjlistMax_V_num;typedefstructAdjlistvexs;intvexnum,arcnum;Graphkindkind;graph十字链表:
用来表示有向图.有向图中,每一条边用一个结点表示,每个顶点也用一个结点表示.(了解)深度优先遍历(dfs)算法思想:
1)访问给定结点;2)重复对第一个未被访问的邻接点进行深度优先遍历,直到不存在未被访问的邻接点结束.可以用一个数组标识顶点是否被访问过.voidDFStraverse(GraphG)for(v