数据结构教案.doc
《数据结构教案.doc》由会员分享,可在线阅读,更多相关《数据结构教案.doc(24页珍藏版)》请在三一办公上搜索。
1、第1章 绪论1.2 基本概念和术语一、 数据、数据元素、数据项1 数据:凡能被计算机存储、加工的对象,通称为数据。2 数据元素:是数据的基本单位,通常具有完整、确定的实际意义。3 数据项:是数据不可分割的最小单位。注意:数据、数据元素、数据项是数据组织的三个层次。如:(80,90,100,110,120)、表格二、 数据的逻辑结构1 逻辑结构:数据元素之间的“邻接”关系2 四种逻辑结构线性结构:数据元素之间存在“一对一”的关系树形结构:数据元素之间存在“一对多”的关系图状结构:数据元素之间存在“多对多”的关系集合:数据元素之间没有邻接关系三、 数据的存储结构1 存储结构:数据元素在计算机内的存
2、放方式2 两种存储结构顺序存储:将数据元素依次存放到一组连续的存储单元中。链式存储:将数据元素存放到非连续的存储单元中,并利用指针将各个存储单元链接起来。四、 数据的基本操作 加工型操作:改变数据元素的个数或数据元素的内容 引用型操作:数据元素的个数或数据元素的内容均未改变五、 数据结构1含义:包括三方面的内容:逻辑结构:反映数据元素之间的邻接”关系存储结构:反映数据元素在计算机内的存放方式数据的操作2. 数据按结构分,可分为4类,每一类对应着一种逻辑结构数据逻辑结构线性表线性结构树树型结构图图状结构查找表集合1.3 算法描述1 算法:解决问题的方法和步骤。2 算法的描述方法 框图 非形式语言
3、:如中文 类C语言程序 C语言程序1.4 算法分析1 对同一问题,可以设计多种不同的算法,但必有一种算法的时间效率最高。2 估算一个算法的运行时间 确定问题的输入规模n。 根据问题的特点,选择一种操作作为“标准操作”。(通常以条件判断或赋值语句为标准操作) 确定在给定输入下共执行多少次标准操作,从而算出运行时间T。3 算法的时间复杂度对算法的运行时间T(n),忽略所有的常数、低次项,忽略最高项的系数,称为算法的时间复杂度,以O表示。运行时间时间复杂度T(n)=c常数阶O(1)T(n)=cn线性阶O(n)T(n)=cn2平方阶O(n2)指数阶O()对数阶O()1.5 指针和结构一、什么是指针1存
4、储单元的地址每一个存储单元由一个或多个字节组成,存储单元中第一个字节的编号称为存储单元的地址。2什么叫指针?指针总是指向某个变量。指针的值是所指向变量的地址,指针的类型是所指向变量的类型。二、指针变量1指针变量的定义类型 *指针变量名;例:int *p;解释:定义一个指针p,它只能指向int型变量。2两个运算符&:取地址运算符,例&i*:指针运算符,例*p例:int *p,i=3; p=&i; printf(%d, %d n,i,*p);说明: &和*互为逆运算,即:&*p=p,*&i=i 定义指针变量时,指针变量名前面的“*”不是指针运算符。 指针可以与整数进行加、减运算。指针n=指针的原值
5、sizeof(指针的类型)n 同类型的两个指针可以相互赋值。三、指针与数组1数组名代表该数组的首地址,例a= =&a02设int a6,则ai ,*(a+i)是等价的&ai ,a+i是等价的3表示数组元素的方法 下标法:例ai 指针法:例*(a+i)4设指针p指向数组a的某一个元素,则p+:使p指向数组的下一个元素;四、结构1定义结构类型 struct 结构名 成员定义列表例:struct person int no; char name6;2定义结构变量struct person x;1 引用结构变量的成员结构变量名成员名2 结构变量的初始化3 结构指针例:已知struct person x
6、,*p; p=&x;则表示x 的no成员有三种形式:x.no,p-no,(*p).no 第2章 线性表21 线性表的定义1线性表的表示形式: L=(a1,a2,a3,an)2线性表的基本操作 每种操作都采用一个函数来完成,这些函数是自定义函数,使用之前必须先定义。22 线性表的顺序存储结构一、顺序表的类型定义顺序表实际是一个结构变量,包括两个域:datas:存放线性表的元素,last:存放线性表的长度。typedef struct 类型 datasmaxsize; int last; sequenlist;sequenlist L;二、为线性表L=(a,b,c,d,)创建一个顺序表,要求L的第
7、1个元素存入数组的1号元素中。typedef struct char datas20; int last; sequenlist;void main() sequenlist L; char ch; int i=1; ch=getchar(); while(ch!=n) L.datasi=ch; i+; ch=getchar(); L.last=i-1;for(i=1;inext=null3单链表的建立(尾插入法)例:为L=(a,b,c,d,)创建单链表。#include malloc.h#include stdio.htypedef struct node char data; struct
8、 node *next; linklist;void main() char ch; /定义三根指针,head指向头结点,t指向新产生的结点,last指向最后的结点 linklist *head, *t, *last; t=malloc(sizeof(linklist); t-next=NULL; head=t; last=t; ch=getchar(); while(ch!=n) t=malloc(sizeof(linklist); t-data=ch; t-next=NULL; last-next=t; last=t; ch=getchar(); 4单链表的插入需设置两支指针:p、t。p:
9、指向待插入结点的前一个结点t:指向新产生的结点5单链表的删除需设置两支指针:p、t。p:指向待删除结点的前一个结点t:指向待删除结点三、其它链表 单链表单向循环链表(循环链表)双向循环链表(双向链表)1 循环链表最后一个结点的指针域不是NULL,而是指向头结点。2 双链表每个结点包含三个域:一个数据域和两个指针域。双链表的特点是找结点的前趋和后继都很容易。第4章 栈和队列41 栈一、栈的定义1基本概念栈顶、栈底、进栈、出栈、空栈2栈的表示形式S=(a1,a2,a3,an)按a1,a2,a3,an 顺序进栈,但按an,a3,a2,a1顺序出栈。a1称为栈底元素,an称为栈顶元素。栈又称后进先出线
10、性表(LIFO)表。二、栈的顺序存储结构1顺序栈的类型定义顺序栈实际上是一个结构变量,包括两个域:data:存放栈中元素,top:存放栈顶元素所在单元的编号。typedef struct 类型 datamaxsize; int top; seqstack;seqstack s;栈空条件:s.top= 0;栈满条件:s.top=maxsize-12为S=(a,b,c,d,)创建一个顺序栈,要求S的第1个元素存入数组的1号元素中。typedef struct char data20; int top; seqstack;void main() seqstack s; char ch; int i=
11、1; ch=getchar(); while(ch!=n) s.datai=ch; i+; ch=getchar(); s.top=i-1;for(i=1;idata=ch;t-next=top;top=t; ch=getchar(); printf(出栈顺序为:n);while(top-next!=NULL) printf(%-4c,top-data); top=top-next;printf(n);42 队列一、队列的定义1基本概念队头、队尾、空队2队列的表示形式:Q=(a1,a2,a3,an)按a1,a2,a3,an 顺序进队,仍按a1,a2,a3,an 顺序出队。队列又称先进先出线性表
12、(FIFO表)二、队列的顺序存储结构1顺序队的类型定义顺序队实际上是一个结构变量,包括三个域:data:存放队列的元素;front:存放队头元素所在单元的前一个单元的编号;rear:存放队尾元素所在单元的编号。typedef struct 类型 datamaxsize; int front, rear; seqqueue;seqqueue q;2顺序队的建立例:为Q=(a,b,c,d,)创建一个顺序队。typedef struct char data20; int front, rear; seqqueue;void main() seqqueue q; char ch; int i=0; c
13、h=getchar(); while(ch!=n) q.datai=ch; i+; ch=getchar(); q.front= -1; q.rear=i-1; /输出队列元素for(i=0;inext=NULL; lq.front=p; lq.rear=p; ch=getchar(); while(ch!=n) p=malloc(sizeof(node); p-data=ch;p-next=NULL;lq.rear-next=p;lq.rear=p;ch=getchar(); /输出队列中的元素 p=lq.front-next; while(p!=NULL) printf(%-4c,p-da
14、ta); p=p-next; printf(n);3链队的队空条件lq.front=lq.rear4 各式链式存储结构比较表有无头结点用何指针标识创建办法链表有头指针head尾插入法链栈无栈顶指针top头插入法链队有由包含front和rear的结构变量lq标识。尾插入法第6章 树和二叉树61 树的定义和基本操作一、树型结构和线性结构树型结构:每个结点可以有多个直接后继线性结构:每个结点只有一个直接后继二、树的定义树是n(n0)个结点的有限集合,任意一棵非空树满足: 有且只有一个根结点; 其余结点被分成若干个互不相交的集合,每个集合又是一棵树。三、树的特点 除根结点外,每个结点有且只有一个直接前
15、趋; 除最底层的结点外,每个结点可以有多个直接后继; 若某棵树有多个结点,则每个结点可以看作根结点,要么是整棵树的根结点,要么是某棵子树的根结点。四、基本术语 结点的度、树的度 叶子结点、分支结点度为0的结点称为叶子结点;度大于0的结点称为分支结点。 孩子结点、双亲结点、兄弟结点具有同一双亲的结点互为兄弟 结点的子孙、结点的祖先 结点的层数、树的高度结点的层数:从树根开始算起,根的层数为1;树的高度:树中所有结点层数的最大值。62 二叉树一、二叉树的定义:参考P73二、二叉树的性质(1)二叉树的第i层上最多有个结点。(2)深度为k的二叉树最多有个结点。(3)满二叉树:除最底层的结点外,其余结点
16、的度均为2的二叉树。(4)完全二叉树:如果对一棵满二叉树的最底层从最右边开始,连续删去若干个结点,就得到完全二叉树。(5)对一棵完全二叉树的结点进行编号,则对编号为i的结点,其左孩子的编号为2i,右孩子的编号为2i+1,双亲结点的编号为三、二叉树的存储结构1顺序存储结构:先将二叉树的结点依次编号,再将结点存入一维数组中,数组元素的序号对应结点的编号。对二叉树的结点进行编号,编号原则是: 根结点的编号为1。 对于编号为i的结点,其左孩子的编号为2i,右孩子的编号为2i+1。 满二叉树、完全二叉树一般采用顺序存储结构,一般二叉树则采用链式存储结构。2链式存储结构: 二叉链表:每个结点包括三个域:数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 教案

链接地址:https://www.31ppt.com/p-4177723.html