数据结构教案Word下载.docx
《数据结构教案Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构教案Word下载.docx(46页珍藏版)》请在冰豆网上搜索。
3.数据对象、数据结构
4.四类基本结构:
集合、线性结构、树形结构、图形结构或网状结构。
5.数据结构一般包括三方面的内容:
逻辑结构
存储结构(物理结构)
数据的运算
算法的设计取决于选定的数据逻辑结构,而算法的实现依赖于采用的存储结构。
6.数据的两种存储结构:
顺序存储结构
链式存储结构
1.3抽象数据类型的表示与实现
类C语言
1.4算法和算法分析
1.4.1算法
算法的定义
算法具有五个重要特性:
有穷性、确定性、可行性、输入、输出
1.4.2算法设计的要求
正确性,可读性,健壮性,高效率低存储
1.4.3算法效率的度量
时间复杂度
1.4.4算法的存储空间需求
空间复杂度
白银市第一中学桑慧琴
数据结构
第2--3次
2.1—2.2
线性表的逻辑结构及运算
线性表的顺序存储及其运算实现
掌握线性表的逻辑结构及运算,线性表的顺序存储结构及其运算的实现
线性表的顺序存储结构及其运算的实现
线性表的顺序存储结构及其运算
第2章线性表
线性结构的特点
2.1线性表的类型定义
1.线性表的定义
(a1,…,ai-1,ai,ai+1,…an)
2.定义在逻辑结构上的运算
表的初始化、求表长、取表中的结点、查找结点、插入结点和删除结点等
3.抽象数据类型线性表的定义
例1:
扩大线性表LA,将存在于线性表LB中而不在LA中的数据元素加入到线性表LA中。
算法思想:
逐一取出LB中的元素,判断是否在LA中,若不在,则插之。
例2:
线性表LA和LB是非递减的,将两表合并成新的线性表LC,且LC也是非递减的。
2.2线性表的顺序表示和实现
1、线性表的顺序表示:
指的是用一组地址连续的存储单元依次存储线性表的数据元素。
用物理位置来表示逻辑结构。
LOC(ai+1)=LOC(ai)+l
LOC(ai)=LOC(a1)+(i-1)*l
2、顺序表的特点:
随机存取
3、线性表的动态分配顺序存储结构(用一维数组)
#defineLIST_INIT_SIZE100
#defineLISTINCREAMENT10
typedefstruct{
ElemType*elem;
intlength;
intlistsize;
}SqList;
4、顺序表的运算
顺序表容易实现访问操作,可随机存取元素。
但插入和删除操作主要是移动元素。
⑴初始化操作
⑵插入操作
(3)删除操作
第3周
2.3.1节
单链表存储及其运算
掌握单链表存储结构及运算的实现。
建立单链表及实现结点的插入和删除等基本运算
关键:
单链表存储结构定义
难点:
基本运算的实现
2.3线性表的链式表示和实现
2.3.1线性链表
1、线性表的链式存储结构的特点
相关概念:
结点(Node)、数据域、指针域、指针、链、头指针
2、链式存储结构的优点:
插入、删除操作是不再需要移动大量的元素,但失去了顺序表的可随机存取特点。
链表的分类
单链表、循环链表和双向链表。
3.单链表:
(1)单链表概念:
链表中的每一个结点中只包含一个指针域的称为单链表或线性链表。
第5次
2.3.2—2.3.3
循环链表、双向链表、静态链表
掌握循环链表、双链表及静态链表存储结构及其运算实现
循环链表及双链表存储结构及其运算实现
循环链表、双向链表的相关运算
2.3.2循环链表
1、循环链表:
特点:
表中最后一个结点的指针域指向头结点,整个链表形成一个环。
循环链表可分为单链和多链的。
2、循环链表的操作:
和线性链表基本一致,差别仅在于循环条件判定是否为空改为是否为头指针。
2.3.3双向链表
1、双向链表:
在双向链表的结点中有两个指针域,分别指向前驱和后继。
双向链表也可以有循环链表。
2、双向链表存储结构定义:
typedefstructDuLNode{
ElemTypedata;
structDuLNode*prior;
structDuLNode*next;
}DuLNode,*DuLinklist;
3、双向链表的操作:
双指针使得链表的双向查找更为方便、快捷。
NextElem和PriorElem的执行时间为O
(1)。
仅需涉及一个方向的指针的操作和线性链表的操作相同。
插入和删除需同时修改两个方向的指针。
4、双向链表的插入操作
1)pnext=q
2)pprior=qprior
3)qpriornext=p
4)qprior=p
2.3.4静态单链表
1.特点:
用数组描述的链表称为静态链表。
2.存储结构定义:
#defineMAXSIZE1000
ElemTypedata;
intcur;
}component,SLinklist[MAXSIZE];
3.运算实现
静态链表的操作和动态链表相似。
以整型游标代替动态指针。
第6-7次
实验1
单链表的建立及相关操作
掌握c上机调试的基本方法。
了解单链表的结构特点及相关概念,
掌握单链表结点链接等相关知识。
单链表的建立
[实验要求]
1、建立一个单链表。
2、并在指定的位置完成插入、删除运算。
3、并方向输出插入、删除结点后的单链表。
第8次
3.1节
栈的定义表示及应用
掌握栈的逻辑结构,存储结构及各种存储结构之上基本运算
栈的顺序存储及基本运算的实现
顺序栈基本运算的实现
第3章栈和队列
3.1栈
3.1.1栈的定义
限定仅在表尾进行插入或删除的线性表
栈顶:
表尾
栈底:
表头
3.1.2栈的表示和实现
1.顺序栈
(1)类型说明:
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
SElemType*base,*top;
intstacksize;
}SqStack;
(2)重要算法的实现:
●入栈操作
●取栈顶元素操作
取栈顶元素与出栈不同之处在于出栈操作改变栈顶指针top的位置,而取栈顶元素操作不改
●出栈操作
●判栈空操作
2.链栈
一个链栈可由栈顶指针top唯一确定,当top为NULL时,是一个空栈。
第9次
第4周
3.4节
队列的定义表示及实现
掌握队列的逻辑结构,存储结构及各种存储结构之上基本运算的实现
队列的逻辑结构,存储结构及各种存储结构之上基本运算的实现
循环队列
3.4队列
3.4.1抽象数据类型队列的定义
允许在线性表的一端插入,另一端进行删除操作的线性表称为队列.
队尾,队头,双向队列
3.4.2链队列
1、单链队列—队列的链式存储结构:
typedefstructQNode
{QElemtypedata;
structQNode*next;
}Qnode,*QueuePtr;
{QueuePtr*front,*rear;
}LinkQueue;
2、链队列的算法:
算法一:
构造一个空队列
算法二:
销毁一个队列
算法三:
判队列是否为空:
算法四:
入队列
算法五:
出队列
3.4.3循环队列
1.存储结构
#defineMAXQSIZE100
QelemType*base;
intfront;
//头指针,若队列不空,指向队列头元素
intrear;
//尾指针,若队列不空,指向队列尾元素的下一个位置
}SqQueue;
3.循环队列的重要算法:
队列长度
intQueueLength(SqQueueQ)
{return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;
}
算法三、循环队列的入队列:
队列满条件:
(Q.rear+1)%MAXQSIZE==Q.front
算法四、循环队列出队列:
第10次
第5周
3.2,3.5
栈和队列的应用
掌握栈和队列的应用
栈的应用
3.2栈的应用
数据转换
递归
3.5队列的应用
银行排队
找舞伴
第11次
4.1—4.2
串的基本概念、存储及算法实现
掌握串的类型定义及不同存储结构之上基本运算的实现
串不同存储方式下的运算
字符串的运算
第4章串
4.1串类型的定义
1.串的概念
由零个或多个字符组成的有限序列。
一般记作s=‘c0c1c2…cn-1(n≥0)
2.串的基本运算
(1)求字符串的长度的运算strlen(str)
(2)字符串拷贝(赋值)strcpy(str1,str2):
(3)字符串的联接strcat(str1,str2):
(4)子串的查询strstr(str1,str2):
(5)字符串的比较strcmp(str1,str2):
(6)求子串substr(str1,str2,m,n):
(7)字符串的删除delstr(str,m,n):
(8)字符串的插入Insstr(str1,m,str2):
(9)字符串的替换replacestr(str1,i,j,str2)
4.2串的表示和实现
4.2.1定长顺序存储表示
#defineMAXSTRLEN255
typedefunsignedcharSString[MAXSTRLEN+1];
//0号单元存放串的长度
串的实际长度可在这预定义长度范围内随意,超过预定义长度的串值则被“截断”
串联接Concat(&
T,S1,S2)
算法二:
求子串SubString(&
Sub,S,pos,len)
4.2.2.堆分配存储表示
typedefstruct{
{char*ch
intlength;
}HString
4.2.3串的块链存储表示
定义:
#defineCHUNKSIZE80
typedefstructChunk{
{charch[CHUNKSIZE];
structChunk*next;
}Chunk;
Chunk*head,*tail;
intcurlen;
}LString;
存储密度=串值所占的存储位/实际分配的存储位
第12次
第6周
4.3—4.4
串的应用
学会串运算的算法
串的模式匹配算法实现
串的模式匹配算法
算法1、字符串的插入操作insstr(str1,i,str2)
算法2、字符串的删除delstr(str,i,j)
算法3、求子字符串算法
算法4、串的模式匹配算法
第13-14次
实验2
判断字符串是否中心对称
学会用c调试程序
综合所学的链表、栈、队列和串的知识
串的操作
实验2判断字符串是否中心对称
[实验要求]
1、从键盘输入数据并将它们建立一种数据结构
2、并通过某种方法判断字符串是否中心对称,输出判断结果
第15次
5.1—5.3.1
数组的定义、顺序表示及特殊矩阵的压缩存储
掌握数组的定义及数组的顺序存储结构;
学习特殊矩阵的压缩存储方法及实现
数组的定义及数组的顺序存储结构
特殊矩阵的压缩存储
第5章数组
5.1数组的定义
1、多维数组的概念
多维数组中每个元素都是数组.
2、一维数组
一维数组可以看成是一个线性表或一个向量,适合于随机查找。
3、二维数组
二维数组可以看成是向量的推广。
二维数组中的每一个元素最多可有两个直接前驱和两个直接后继(边界除外),故是一种典型的非线性结构。
4、三维数组
三维数组最多可有三个直接前驱和三个直接后继
三维以上数组可称为多维数组,可有多个直接前驱和多个直接后继,是一种非线性结构
5.2数组的顺序表示和实现
数组一般不作插入和删除操作,宜采用顺序存储结构
1、存放规则
行优先
列优先
2.地址计算
(1)二维数组:
LOC(aij)=LOC(a00)+(i×
n+j)×
l。
(3)三维数组:
LOC(aijk)=LOC(a000)+(i×
n×
p+j×
p+k)×
L。
5.3矩阵的压缩存储
5.3.1特殊矩阵及其压缩存储
1.对称矩阵
2.三角矩阵
(1)上三角矩阵
(2)下三角矩阵
(3)对角矩阵
第16次
第7周
5.3.2—5.5
稀疏矩阵的压缩存储
广义表的定义、表示及存储
学习稀疏矩阵的压缩存储
学习广义表的定义、表示及存储
稀疏矩阵的压缩存储:
三元组表和十字链表
广义表的定义、基本操作(取表头、表尾)
广义表的基本操作(取表头、表尾)
5.3.2稀疏矩阵的压缩存储:
1.三元组表
2.带行指针的链表
3.十字链表
5.4广义表的定义
1.广义表的定义
2.广义表的表示方法
3.广义表的分类
(1)线性表:
(2)纯表
(3)再入表:
(4)递归表:
4.广义表的深度
一个广义表的深度是指该广义表展开后所含括号的层数。
5、广义表的长度:
表中包含原子个数,或者原子和子表的个数和或子表的个数。
6.广义表举例
7、广义表的运算
(1)、求广义表的头
head(表名)
(2)、求广义表的表尾
tail(表名)
5.5广义表的存储结构
采用链接存储方法
头尾链表:
扩展链表:
第17次
6.1—6.2.2
树的基本知识,二叉树的概念和性质
学习树的基本概念
掌握二叉树的基本概念和性质
二叉树的性质
二叉树的性质
树形结构的概念
第6章树与二叉树
6.1树的定义和基本术语
1.树的定义
2.树的常用术语
结点的度
树的度
儿子结点
父亲结点
兄弟结点
3.树的表示形式
4.树形结构的逻辑结构
树形结构的逻辑特征可用树中结点之间的父子关系来描述
树形结构是非线性结构
6.2二叉树
6.2.1二叉树的定义
二叉树的五种基本形态:
6.2.2二叉树的重要性质
性质1、在二叉树中的第i层上最多有的结点数为2i-1个结点。
(i≥1)
性质2、深度为k的二叉树至多有2k-1个结点(i≥1)
性质3、在任意二叉树中,若叶子结点(即度为零的结点)的个数为n0,度为1的结点个数为n1,度为2的结点个数为n2,则有n0=n2+1
性质4:
具有n个结点的完全二叉树树深为log2n+1
性质5、对于完全二叉树,对其结点采用“按层编号”比较方便,即从根结点开始由上而下逐层给结点编号,同一层的结点由左向右编号。
•对于完全二叉树中任一个编号为i的结点(1≤i≤n),它的父结点和左、右儿子结点的编号与i值有如下的关系:
1)如果i=1,则它是整个树的根结点,无父结点;
2)若i>
1,则其父结点编号为。
3)如果2i≤n,则其左儿子结点编号为2i;
若2i>
n,则无左儿子结点。
4)如果(2i+1)≤n,则其右儿子结点编号为(2i+1);
反之,则无右儿子结点。
第18次
第8周
6.2.3—6.3.1
二叉树的存储、遍历二叉树
掌握二叉树的存储结构
掌握二叉树的三种遍历方式
掌握遍历算法的应用
二叉树遍历算法
遍历算法的应用
6.2.3、二叉树的存储结构
1、顺序存储
适合于存储完全二叉树来说
2、链式存储结构
(1)二叉树的二叉链表存储:
typedefstructBiTNode{
TElemTypedata;
StructBiTNode*lchild,*rchile;
}BiTNode,*BiTree;
(2)二叉树的三叉链表存储
StructBiTNode*lchil