考前串讲(精品).ppt
《考前串讲(精品).ppt》由会员分享,可在线阅读,更多相关《考前串讲(精品).ppt(141页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、考前串讲考前串讲数据结构数据结构 辅导辅导1线性表的概念线性表的概念顺序表顺序表 链表链表第二章第二章 线性表线性表2线性表线性表 (Linear List)(Linear List)n线性表的定义和特点线性表的定义和特点r定义定义 n(0)个数据元素的有限序列,记作个数据元素的有限序列,记作 (a1,a2,an)ai 是表中数据元素,是表中数据元素,n 是表长度。是表长度。r特点特点 线性排列(这是非线性结构不具备的)线性排列(这是非线性结构不具备的)除第一个元素外,其他每一个元素有一个除第一个元素外,其他每一个元素有一个且仅有一个且仅有一个直接前驱直接前驱。除最后一个元素外,其他每一个元素
2、有一除最后一个元素外,其他每一个元素有一个且仅有一个个且仅有一个直接后继直接后继。3n理解线性表与非线性表的区别理解线性表与非线性表的区别a)线性表每个元素最多一个直接前驱和一个线性表每个元素最多一个直接前驱和一个直接后继。直接后继。b)非线性表每个元素没有这个限制:非线性表每个元素没有这个限制:多维数组每个元素最多有多个直接前驱多维数组每个元素最多有多个直接前驱和多个直接后继。和多个直接后继。树结构每个元素最多一个直接前驱,但树结构每个元素最多一个直接前驱,但可能有多个直接后继。可能有多个直接后继。图结构每个元素最多有多个直接前驱和图结构每个元素最多有多个直接前驱和多个直接后继。多个直接后继
3、。4顺序表顺序表 (Sequential List)(Sequential List)n顺序表的定义和特点顺序表的定义和特点a)定义定义 将线性表中的元素相继存放在一个连续将线性表中的元素相继存放在一个连续的存储空间中,即构成顺序表。的存储空间中,即构成顺序表。b)存储存储 它是线性表的顺序存储表示,可利用一它是线性表的顺序存储表示,可利用一维数组描述存储结构。维数组描述存储结构。a)静态数组:不可扩充静态数组:不可扩充b)动态数组:可扩充动态数组:可扩充c)特点特点 元素的元素的逻辑顺序与物理顺序一致逻辑顺序与物理顺序一致。d)访问方式访问方式 可顺序存取,可按下标直接存取。可顺序存取,可按
4、下标直接存取。5顺序表的静态结构定义顺序表的静态结构定义#define ListSize 100 /最大允许长度最大允许长度typedef int ElemType;/元素的数据类型元素的数据类型typedef struct ElemType elemListSize;/存储数组存储数组 int length;/当前表元素个数当前表元素个数 SeqList;n顺序表静态定义,假定顺序表静态定义,假定 L 是一个类型是一个类型 SeqList 的的顺序表,一般用顺序表,一般用 L.elemi 来访问它。来访问它。n表一旦装满,不能扩充。表一旦装满,不能扩充。6顺序表的动态结构定义顺序表的动态结构
5、定义#define ListSize 100 /最大允许长度最大允许长度typedef int ElemType;/元素的数据类型元素的数据类型typedef struct ElemType*elem;/存储数组存储数组 int length;/当前表元素个数当前表元素个数 int maxSize;/表的最大长度表的最大长度 SeqList;n顺序表动态定义,它可以扩充,新的大小计入顺序表动态定义,它可以扩充,新的大小计入数据成员数据成员maxSize中。中。7n例题:在整数型顺序表例题:在整数型顺序表 A 中查找是否存在两个整中查找是否存在两个整数,它们相加之和等于数,它们相加之和等于 x。
6、是则函数返回。是则函数返回true,否否则函数返回则函数返回false。如果表中有多个相加等于。如果表中有多个相加等于x的的整数,找到一组即可。整数,找到一组即可。bool Find(SeqList&A,int x)for(int i=0;i A.length;i+)for(int j=i+1;j link;char Sn;int top=-1;while(p!=NULL)top+;Stop=p-data;/链表字符进栈链表字符进栈 p=p-link;p=L-link;while(top!=-1)if(Stop!=p-data)return false;top-;/退栈退栈14 p=p-lin
7、k;/字符相等比较下一个字符相等比较下一个return true;/全部相等全部相等15栈栈队列队列第三章第三章 栈和队列栈和队列16n只允许在一端插入和删除的线性表。允许插入和只允许在一端插入和删除的线性表。允许插入和删除的一端称为栈顶删除的一端称为栈顶(top),另一端称为栈底另一端称为栈底(bottom)n特点:后进先出特点:后进先出(LIFO)n栈的主要操作栈的主要操作r进栈进栈 Push(S,x)r退栈退栈 Pop(S,&x)r看栈顶看栈顶 getTop(S,&x)r置空栈置空栈 initStack(S)r判栈空,判栈满判栈空,判栈满栈栈(Stack)退栈进栈a0an-1an-2to
8、pbottom17栈的数组表示栈的数组表示 顺序栈顺序栈0 1 2 3 4 5 6 7 8 9 StackSize-1top(栈空栈空栈空栈空)elem#define InitSize 100#define StackIncreament 10typedef char ElemType;typedef struct /顺序栈定义 ElemType*elem;/栈数组 int top,StackSize;/栈顶指针及栈大小 SeqStack;18void OverFlow(SeqStack&S)/栈满处理 int newSize=2*S.StackSize;ElemType*newS=new E
9、lemTypenewSize;if(newS=NULL)printf(“数组创建失败!n”);exit(1);ElemType*src=S.elem,*obj=newS;for(int i=0;i S.StackSize;i+)*obj+=*src+;/向新数组传送数据 delete S.elem;/释放老数组 S.elem=newS;/新数组作为栈数组 S.StackSize=newSize;/新数组大小 /栈顶指针不变19top栈的链接表示栈的链接表示 链式栈链式栈n链式栈用不带表头结点的单链表作为其存储结构。链式栈用不带表头结点的单链表作为其存储结构。n链式栈的栈顶在链头,插入与删除仅在
10、栈顶处执链式栈的栈顶在链头,插入与删除仅在栈顶处执行。行。n链式栈栈空即链表空,链式栈栈空即链表空,top=NULL。20a0 a1 a2 an-1frontrear队列队列(Queue)n定义定义n队列是只允许在一端删除,在另一端插入的线队列是只允许在一端删除,在另一端插入的线性表性表n允许删除的一端叫做队头允许删除的一端叫做队头(front),允许插入的,允许插入的一端叫做队尾一端叫做队尾(rear)。n特性特性n先进先出先进先出(FIFO,First In First Out)21队列的数组存储表示队列的数组存储表示 顺序队列顺序队列#define QueueSize 50;typede
11、f int ElemType;/每个元素的数据类型typedef struct/顺序队列的结构定义 ElemType*elem;/队列存储数组 int rear,front;/队尾与队头指针 SeqQueue;n队列与栈的共性在于它们都是队列与栈的共性在于它们都是限制了存取位置的限制了存取位置的线性表线性表;区别在于存取位置有所不同。;区别在于存取位置有所不同。22队列的进队和出队的原则队列的进队和出队的原则n有两种进有两种进/出队列的方案,考虑一种:出队列的方案,考虑一种:先加元素先加元素再动指针再动指针r进队时先将新元素按进队时先将新元素按 rear 指示位置加入,再指示位置加入,再让队尾
12、指针进一让队尾指针进一 rear=rear+1。r队尾指针指示实际队尾的后一位置。队尾指针指示实际队尾的后一位置。r出队时先将下标为出队时先将下标为 front 的元素取出,再将队的元素取出,再将队头指针进一头指针进一 front=front+1。r队头指针指示实际队头的位置。队头指针指示实际队头的位置。r清华、北大教材均为此方案。清华、北大教材均为此方案。23循环队列循环队列(Circular Queue)n队列存放数组被当作首尾相接的环形表处理。队列存放数组被当作首尾相接的环形表处理。n队头、队尾指针加队头、队尾指针加 1 时从时从 QueueSize-1 直接进到直接进到0,可用语言的取
13、模(,可用语言的取模(%)运算实现。)运算实现。r队头指针进队头指针进1:front=(front+1)%QueueSize;r队尾指针进队尾指针进1:rear=(rear+1)%QueueSize;r队列初始化:队列初始化:front=rear=0;r队空条件:队空条件:front=rear;r队满条件:队满条件:(rear+1)%QueueSize=front。n注意,进队和出队时指针都是顺时针前进。注意,进队和出队时指针都是顺时针前进。2401234567front01234567front01234567frontrearAABCrearrear空队列空队列A 进进队队B,C 进进队队
14、0123456701234567A 退退队队B 退退队队01234567D,E,F,G,H,I 进进队队frontBCrearAfrontBCrearfrontCrearDEFG HI25循环队列操作的实现循环队列操作的实现bool QueueEmpty(SeqQueue&Q)return Q.rear=Q.front;bool EnQueue(SeqQueue&Q,ElemType x)if(QueueFull(Q)return 0;Q.elemQ.rear=x;Q.rear=(Q.rear+1)%QueueSize;return 1;26bool DeQueue(SeqQueue&Q,El
15、emType&x)if(QueueEmpty(Q)return 0;x=Q.elemQ.front;Q.front=(Q.front+1)%QueueSize;return 1;bool getFront(SeqQueue&Q,ElemType&x)if(QueueEmpty(Q)return 0;x=Q.elemQ.front;return 1;27队列的链接表示队列的链接表示 链式队列链式队列frontrearn链式队列采用不带表头的单链表存储队列元素,链式队列采用不带表头的单链表存储队列元素,队头在链头,队尾在链尾。队头在链头,队尾在链尾。n链式队列在进队时无队满问题,但有队空问题。链式
16、队列在进队时无队满问题,但有队空问题。n队空条件为队空条件为 front=NULL,不必判断是否,不必判断是否 rear=front。n链式队列特别适合多个队列同时操作的情形。在链式队列特别适合多个队列同时操作的情形。在并行处理、排序等方面有用。并行处理、排序等方面有用。28字符串定义字符串定义字符串的顺序表示字符串的顺序表示字符串的链表表示字符串的链表表示第四章第四章 字符串字符串29字符串字符串 (String)(String)n字符串的定义:字符串的定义:字符串是字符串是 n(0)个字符的有限序列,记作个字符的有限序列,记作 S:“c1c2c3cn”n其中,其中,S 是串名字,是串名字,
17、“c1c2c3cn”是串值,是串值,ci 是串是串中字符,中字符,n 是串的长度。例如是串的长度。例如,S=“Tsinghua University”n子串的定义:子串的定义:若串若串S是由串是由串S中连续抽取若干字符组成,则称中连续抽取若干字符组成,则称串串S是串是串S的子串。的子串。n例如,例如,“ity”是是“University”的子串。的子串。30n真子串:串是自己的子串。设一个串的长度为真子串:串是自己的子串。设一个串的长度为n,则长度小于则长度小于n的子串即为它的真子串。的子串即为它的真子串。n一个串的子串数目有一个串的子串数目有1+2+(n-1)+n=n(n+1)/2 真子串数
18、目真子串数目31判断字符串是否中心对称判断字符串是否中心对称n例如,例如,“abcddcba”或或“abcdcba”都是中心对称。都是中心对称。n一种解法是两头设指针,向中间并进,检查对应一种解法是两头设指针,向中间并进,检查对应字符是否相等,直到中间会合。字符是否相等,直到中间会合。bool center-sym(HString&S)int i=0,j=S.curLen-1;while(i j if(S.chi!=S.chj)return false;else i+;j-;return true;32第五章第五章 数组和广义表数组和广义表三对角矩阵的压缩存储三对角矩阵的压缩存储广义表广义表3
19、3三对角矩阵的压缩存储三对角矩阵的压缩存储B a00 a01 a10 a11 a12 a21 a22 a23 an-1n-2 an-1n-1 0 1 2 3 4 5 6 7 8 9 1034n三对角矩阵中除主对角线及在主对角线上三对角矩阵中除主对角线及在主对角线上 下最临下最临近的两条对角线上的元素外,所有其它元素均为近的两条对角线上的元素外,所有其它元素均为0。总共有。总共有3n-2个非零元素。个非零元素。n将三对角矩阵将三对角矩阵A中三条对角线上的元素按行存放中三条对角线上的元素按行存放在一维数组在一维数组 B 中,且中,且a00存放于存放于B0。n在三条对角线上的元素在三条对角线上的元素
20、aij 满足满足 0 i n-1,i-1 j i+1n在一维数组在一维数组 B 中中 Aij 在第在第 i 行,它前面有行,它前面有 3*i-1 个非零元素个非零元素,在本行中第在本行中第 j 列前面有列前面有 j-i+1 个,所个,所以元素以元素 Aij 在在 B 中位置为中位置为 k=2*i+j。35n若已知三对角矩阵中某元素若已知三对角矩阵中某元素 Aij 在数组在数组 B 存存放于第放于第 k 个位置,则有个位置,则有 i=(k+1)/3 j=k-2*in例如,当例如,当 k=8 时,时,i=(8+1)/3 =3,j=8-2*3=2 当当 k=10 时,时,i=(10+1)/3 =3,
21、j=10-2*3=436广义表广义表 (General Lists)(General Lists)n广义表是广义表是 n(0)个表元素组成的有限序列,个表元素组成的有限序列,记作记作 LS(a1,a2,a3,an)nLS 是表名,是表名,ai 是表元素,可以是表(是表元素,可以是表(称为子表)称为子表),可以是数据元素(称为原子)。,可以是数据元素(称为原子)。nn为表的长度。为表的长度。n=0 的广义表为空表。的广义表为空表。nn 0时,时,表的第一个表元素称为广义表表的第一个表元素称为广义表 的表头的表头(head),除此之外,其它表元素组成的表称),除此之外,其它表元素组成的表称为广义表
22、的表尾(为广义表的表尾(tail)。)。37广义表的特性广义表的特性n有次序性有次序性n有长度有长度n有深度有深度n可共享可共享n可递归可递归A()A长度为长度为0,深度为,深度为1B(6,2)B长度为长度为2,深度为,深度为1C(a,(5,3,x)C长度为长度为2,深度为,深度为2D(B,C,A)D长度为长度为3,深度为,深度为3E(B,D)E长度为?长度为?深度为?深度为?F(4,F)F长度为?长度为?深度为?深度为?38广义表的表头与表尾广义表的表头与表尾n广义表的第一个表元素即为该表的表头,除表广义表的第一个表元素即为该表的表头,除表头元素外其他表元素组成的表即为该表的表尾。头元素外其
23、他表元素组成的表即为该表的表尾。A()head(A)和和 tail(A)不存在不存在B(6,2)head(B)=6,tail(B)=(2)C(a,(5,3,x)head(C)=aD(B,C,A)tail(C)=(5,3,x)E(B,D)head(5,3,x)=(5,3,x)F(4,F)tail(5,3,x)=()39A AB BC Cu vax y zD Du vax y zB BC CA Au vax y zB BC CA AE ED D空表空表空表空表线性表线性表线性表线性表再入表再入表再入表再入表纯表纯表纯表纯表F F递归表递归表递归表递归表d40树的定义与基本概念树的定义与基本概念二叉
24、树二叉树 二叉树遍历二叉树遍历第六章第六章 树与二叉树树与二叉树41二叉树的五种不同形态二叉树的五种不同形态LLRR二叉树(Binary Tree)n二叉树的定义二叉树的定义一棵二叉树是结点的一个有限集合,该集合或者一棵二叉树是结点的一个有限集合,该集合或者为空,或者是由一个根结点加上两棵分别称为左为空,或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。子树和右子树的、互不相交的二叉树组成。n这个定义是递归的。这个定义是递归的。42n注意,结点的深度和结点的高度是不同的。结点注意,结点的深度和结点的高度是不同的。结点的深度即结点所处层次,是从根向下逐层计算的;的深度即结
25、点所处层次,是从根向下逐层计算的;结点的高度是从下向上逐层计算的:结点的高度是从下向上逐层计算的:叶结点的高叶结点的高度为度为1,其他结点的高度是取它的所有子女结点最其他结点的高度是取它的所有子女结点最大高度加一。大高度加一。n例如,例如,E的高度为的高度为4,深,深度为度为3.n树的深度与高度相等。树的深度与高度相等。树的深度按离根最远的树的深度按离根最远的叶结点算,树的高度按叶结点算,树的高度按根结点算,都是根结点算,都是6。ABCDEGHILJ高度=4深度=343二叉树的性质性质性质1 若二叉树的层次从若二叉树的层次从 1 开始开始,则在二叉树的第则在二叉树的第 i 层层最多有最多有 2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 考前 串讲 精品
限制150内