数据结构完整版课件全套ppt教学教程 最全电子讲义(最新).ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构完整版课件全套ppt教学教程 最全电子讲义(最新).ppt》由会员分享,可在线阅读,更多相关《数据结构完整版课件全套ppt教学教程 最全电子讲义(最新).ppt(500页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构数据结构项目一共分为二个任务项目一共分为二个任务项目一项目一 数据结构导论数据结构导论任务一任务一 数据结构入门数据结构入门任务二任务二 算法与算法分析算法与算法分析 数据结构数据结构项目二共分为三个任务项目二共分为三个任务项目二项目二 线性表线性表任务一任务一 线性表的定义和基本操作线性表的定义和基本操作 任务二任务二 线性表的顺序存储结构线性表的顺序存储结构 任务三任务三 线性表的链式存储结构线性表的链式存储结构 一、线性表的定义一、线性表的定义 二、线性表的基本操作二、线性表的基本操作 任务一任务一 线性表的定义和基本操作线性表的定义和基本操作 一、线性表的定义一、线性表的定义
2、线性表是由线性表是由n(n0)个类型相同的数据元素个类型相同的数据元素a1,a2,an组成的有限组成的有限序列,数据元素之间是一对一的关系,记作序列,数据元素之间是一对一的关系,记作L(a1, a2, , ai1, ai, ai1, , an)二、线性表的基本操作二、线性表的基本操作 InitList (L):初始化线性表初始化线性表L,即,即构造构造一个一个空空的线性的线性表表L。 DestroyList (L):线性表线性表L已存在,已存在,将表将表L销毁销毁。 ClearList (L):线性表线性表L已存在,将已存在,将表表L置为空表置为空表。 ListEmpty (L):线性表线性表
3、L已存在,如果表已存在,如果表L为空为空则返回则返回TRUE,否否则则返回返回FALSE。 ListLength (L):线性表线性表L已存在,已存在,返回表返回表L的长度的长度,即表中数据元素,即表中数据元素 的个数。的个数。 GetElem (L, i):线性表线性表L已存在,已存在,返回返回表表L中中第第i(1iListLength (L))个个元素的值元素的值。 Locate (L, e):线性表线性表L已存在,已存在,返回表返回表L中元素中元素e所在位置所在位置;如果表;如果表L中不存在元素中不存在元素e,则返回,则返回0。 InsertList (L, i, e):线性表线性表L已
4、存在,已存在,在在表表L中中第第i(1iListLength (L))个位置之前插入个位置之前插入新的数据元素新的数据元素e,表,表L的长度加的长度加1。 DeleteList (L, i, e):线性表线性表L已存在且非空,已存在且非空,删除删除表表L中的中的第第i个数据元个数据元素素,并用并用e返回其值返回其值,表,表L的长度减的长度减1。 PriorElem (L, e):线性表线性表L已存在,若已存在,若e是表是表L的数据元素且不是第一的数据元素且不是第一个,则个,则返回返回数据元素数据元素e的前驱元素的前驱元素;否则操作失败。;否则操作失败。 NextElem (L, e):线性表线
5、性表L已存在,若已存在,若e是表是表L的数据元素且不是最后的数据元素且不是最后一个,则一个,则返回返回数据元素数据元素e的后继元素的后继元素;否则操作失败。;否则操作失败。 任务二任务二 线性表的顺序存储结构线性表的顺序存储结构 一、顺序表的一、顺序表的结构特点结构特点 二、顺序表的二、顺序表的基本操作基本操作 线性表的线性表的顺序存储顺序存储是指,在内存中用一是指,在内存中用一组地址连续的存储单元依次存储组地址连续的存储单元依次存储线性表中的各个线性表中的各个数据元素数据元素。采用顺序存储结构的线性表称为采用顺序存储结构的线性表称为顺序表顺序表。一、顺序表的结构特点一、顺序表的结构特点 假设
6、线性表中有假设线性表中有n个数据元素,每个元素占用个数据元素,每个元素占用k个存储单元,其中第一个存储单元,其中第一个数据元素个数据元素a1的存储地址称为线性表的的存储地址称为线性表的起始位置或基地址起始位置或基地址,线性表的,线性表的顺序存储结构如图顺序存储结构如图2-1所示。所示。 相邻两个数据元素的存相邻两个数据元素的存储地址之间的关系:储地址之间的关系: LOC(ai1)LOC(ai)k 第第i个数据元素个数据元素ai的存储地址:的存储地址: LOC(ai)LOC(a1)(i1)k 线性表的顺序存储结构是一种线性表的顺序存储结构是一种随机存取随机存取的存储结构。的存储结构。 若已知线性
7、表的起始位置(基地址)和表中每个数据元素所占若已知线性表的起始位置(基地址)和表中每个数据元素所占存储单元的大小存储单元的大小k k,就可以计算出线性表中任意一个数据元素,就可以计算出线性表中任意一个数据元素的存储地址,这种存取元素的方法称为随机存取法的存储地址,这种存取元素的方法称为随机存取法顺序表的存储结构通常用一维数组来描述,用顺序表的存储结构通常用一维数组来描述,用C语言实现线性表的顺语言实现线性表的顺序存储结构的类型定义如下:序存储结构的类型定义如下: #define c 100/线性表的最大长度线性表的最大长度typedef structElemType elem MAXSIZE;
8、 /存储线性表中数据元素的数组存储线性表中数据元素的数组int length;/线性表的当前长度线性表的当前长度SeqList;typedef structElemType *elem;/线性表中数据元素的基地址线性表中数据元素的基地址int length;/线性表的当前长度线性表的当前长度int listsize;/当前为线性表分配的存储容量当前为线性表分配的存储容量SeqList;也可以这样来定义:也可以这样来定义: 定义一个顺序表的方法有两种:定义一个顺序表的方法有两种: 方法一方法一:SeqList L,表示将,表示将L L定义为定义为SeqList类型的变量;类型的变量; 方法二方法
9、二:SeqList *L,表示将,表示将L L定义为指向定义为指向SeqList类型的指针。类型的指针。 对表中数据元素进行操作应使用对表中数据元素进行操作应使用L.elemi 对表中数据元素进行操作应使用对表中数据元素进行操作应使用L-elemi 二、顺序表的基本操作二、顺序表的基本操作 1初始化顺序表初始化顺序表 2插入数据元素插入数据元素 3删除数据元素删除数据元素 4查找数据元素查找数据元素 1初始化顺序表初始化顺序表 初始化顺序表操作是指构造一个空的顺序表,并为其分配存储空间。初始化顺序表操作是指构造一个空的顺序表,并为其分配存储空间。 其算法描述如下:其算法描述如下:Status
10、InitList (SqList *L)/初始化顺序表初始化顺序表L - elem = (ElemType *) malloc (MAXSIZE * sizeof (ElemType); /分配存储空间分配存储空间if (! L - elem) return OVERFLOW; /存储空间分配失败存储空间分配失败L - length = 0;/当前线性表长度为当前线性表长度为0L - listsize = LIST_MAX_SIZE; /初始化存储容量初始化存储容量return TRUE; 2插入数据元素插入数据元素 为了在顺序表中第为了在顺序表中第i(1in)个位置插入数据元素个位置插入数据
11、元素e,需先,需先将第将第i个至第个至第n个元素(共个元素(共ni1个)依次向后移动一个位个)依次向后移动一个位置,再将置,再将e插入到第插入到第i个位置。个位置。若若in1,则只需在线性表,则只需在线性表的末尾插入的末尾插入e即可。即可。 算法描述如下:算法描述如下: Status ListInsert (SqList *L, int i, ElemType e)int j;if (i L - length + 1)return FALSE; /i值不合法,出错处理值不合法,出错处理if (L - length = L.listsize) /当前存储空间满当前存储空间满return OVER
12、FLOWfor (j = L - length 1; j = i - 1; j -)L - elem j + 1 = L - elemj;/第第i个位置之后的元素依次向后移个位置之后的元素依次向后移L - elemi 1 = e; /将将e插入到第插入到第i个位置个位置L - length +; /表长增表长增1return TRUE; 假设在顺序表中第假设在顺序表中第i个位置插入一个元素的概率为个位置插入一个元素的概率为pi,则在长度为,则在长度为n的的线性表中插入一个数据元素时,需要移动其他元素的平均次数为:线性表中插入一个数据元素时,需要移动其他元素的平均次数为: 该算法的时间复杂度为该
13、算法的时间复杂度为O(n)。 3删除数据元素删除数据元素 删除顺序表中第删除顺序表中第i(1in)个个数据元素,需将第数据元素,需将第i1个至第个至第n个元素(共个元素(共ni个)依次向前个)依次向前移动一个位置。顺序表进行删移动一个位置。顺序表进行删除操作的前后,其数据元素在除操作的前后,其数据元素在存储空间中的位置变化如图存储空间中的位置变化如图2-3所示。所示。算法描述如下:算法描述如下: Status ListDelete (SqList *L, int i)/在顺序表在顺序表L中删除第中删除第i个数据元素,其中个数据元素,其中1iL-lengthint j;if (i L - len
14、gth) return FALSE; /i值不合法,出错处理值不合法,出错处理for (j = i; j length; j +)L - elemj - 1 = L - elemj; /第第i个位置之后的元素依次向前移个位置之后的元素依次向前移L - length -; /表长减表长减1return TRUE; 假设删除顺序表中第假设删除顺序表中第i个数据元素的概率为个数据元素的概率为qi,则在长度为,则在长度为n的线性表的线性表中删除一个数据元素时,需要移动其他元素的平均次数为中删除一个数据元素时,需要移动其他元素的平均次数为 该算法的时间复杂度也为该算法的时间复杂度也为O(n)。 在顺序表
15、中查找值为在顺序表中查找值为e的数据元素,并返回该元素在表中的位置。的数据元素,并返回该元素在表中的位置。 4查找数据元素查找数据元素 方法:方法:从第一个数据元素开始,依次将表中的元素与从第一个数据元素开始,依次将表中的元素与e进行比较,进行比较,若相等,则返回该元素在表中的位置;否则,查找失败。若相等,则返回该元素在表中的位置;否则,查找失败。 算法描述如下:算法描述如下: int Locate (SqList L, ElemType e)/在顺序表中查找值为在顺序表中查找值为e的数据元素,查找成功,返回该元素的数据元素,查找成功,返回该元素的位置;否则返回的位置;否则返回0for (i
16、= 0; i = L.elemL.length - 1) /item值大于表中最大的数据元素值大于表中最大的数据元素 L.elemL.length = item; /将将item插入到表尾插入到表尾else i = 0; while (item = L.elemi) /寻找寻找item的插入位置的插入位置i i +; ListInsert (&L, i, item); /将将item插入到位置插入到位置i L.length +; /表长增表长增1任务三任务三 线性表的链式存储结构线性表的链式存储结构 一、单链表的结构特点一、单链表的结构特点 二、单链表的基本操作二、单链表的基本操作 三、静态链
17、表及其基本操作三、静态链表及其基本操作 四、循环链表及其基本操作四、循环链表及其基本操作 五、双向链表及其基本操作五、双向链表及其基本操作 数据元素的存储结构,称为数据元素的存储结构,称为结点结点(Node) 数据域:数据域:存储数据元素本身的数据信息存储数据元素本身的数据信息指针域:指针域:存储直接后继元素地址的信息存储直接后继元素地址的信息一、单链表的结构特点一、单链表的结构特点 将将n个数据元素通过其对应结点的指针域按其逻辑关系链接成一个链表,个数据元素通过其对应结点的指针域按其逻辑关系链接成一个链表,链表中的每个结点只包含一个指针域,这样的链表称为链表中的每个结点只包含一个指针域,这样
18、的链表称为线性链表或单线性链表或单链表链表,其一般形式如图,其一般形式如图2-5所示。所示。 head称为头指针,用于指称为头指针,用于指向单链表的第一个结点。向单链表的第一个结点。由于单链表的最后一个结由于单链表的最后一个结点没有直接后继,所以其点没有直接后继,所以其指针域为指针域为“空空”(NULL),),用符号用符号“”表示。表示。 单链表的单链表的存储结构存储结构定义:定义: typedef struct Node/结点类型结点类型ElemType data;/数据域数据域struct Node *next;/指针域指针域Node, *LinkList;通常在单链表的第一个结点之前设立
19、一个结点,称之为通常在单链表的第一个结点之前设立一个结点,称之为头结点头结点。头结。头结点的数据域可以不存储任何数据信息,也可以存储一个线性表中不包点的数据域可以不存储任何数据信息,也可以存储一个线性表中不包括的元素值;头结点的指针域存储第一个结点的地址信息。括的元素值;头结点的指针域存储第一个结点的地址信息。 二、单链表的基本操作二、单链表的基本操作 1建立单链表建立单链表 2插入数据元素插入数据元素 3删除数据元素删除数据元素 4查找数据元素查找数据元素 5求单链表的长度求单链表的长度 1建立单链表建立单链表 LinkList *Create (LinkList *L)/建立一个单链表,将
20、新结点插入表尾建立一个单链表,将新结点插入表尾Node *r, *s;ElemType c;int i;*L = (LinkList) malloc (sizeof(Node);/为头结点分配存储空间为头结点分配存储空间r = *L;/r初值指向头结点初值指向头结点for (i = 1; i data = c;/将要插入数据元素的值赋给新结点的数据域将要插入数据元素的值赋给新结点的数据域s - next = NULL;/链表末尾结点指针域为空链表末尾结点指针域为空r - next = s;/将新结点插入到当前链表的表尾上将新结点插入到当前链表的表尾上r = s; /r始终指向链表的当前表尾始终
21、指向链表的当前表尾return L; 算法描述如下:算法描述如下: 该算法的时间复杂度为该算法的时间复杂度为O(n) 2插入数据元素插入数据元素 算法描述如下:算法描述如下: Status ListInsert (LinkList *L, int i, ElemType e)/在单链表在单链表L中第中第i个位置插入一个数据元素个位置插入一个数据元素eNode *p, *s;int j = 0;p = *L;while (p != NULL & j next; j +; if (j != i - 1)return FALSE;/未找到插入位置,出错处理未找到插入位置,出错处理s = (LinkL
22、ist) malloc (sizeof (Node);/生成新结点生成新结点s - data = e;/将要插入数据元素的值赋给新结点的数据域将要插入数据元素的值赋给新结点的数据域s - next = p- next;/插入新结点插入新结点p - next = s;return TRUE; 该算法的时间复杂度为该算法的时间复杂度为O(n) 3删除数据元素删除数据元素 算法描述如下:算法描述如下: Status ListDelete (LinkList *L, int i, ElemType *e)/删除单链表删除单链表L中的第中的第i个结点,并用个结点,并用e返回被删除的元素返回被删除的元素N
23、ode *p, *r;int j = 0;p = *L;while (p - next != NULL & j next;j +; if (j != i - 1) return FALSE;/未找到要删除的结点,出错处理未找到要删除的结点,出错处理r = p - next;/指针指针r指向要删除的结点指向要删除的结点p - next = p - next - next;/删除结点删除结点r*e = r - data;/将删除结点的值保存在将删除结点的值保存在e中中free (r);/释放被删除结点所占的内存空间释放被删除结点所占的内存空间return TRUE; 该算法的时间复杂度为该算法的时
24、间复杂度为O(n) 4查找数据元素查找数据元素 (1 1)按序号查找)按序号查找 查找单链表中的第查找单链表中的第i i个结点,算法描述如下:个结点,算法描述如下: LinkList GetElem (LinkList L, int i)/在单链表在单链表L中查找第中查找第i个结点,并返回该结点的指针个结点,并返回该结点的指针Node *p;int j = 0;p = L;/指针指针p初值指向头结点初值指向头结点while (p - next != NULL) & (j next;/指向下一个结点指向下一个结点 j +; /已扫描过的结点数已扫描过的结点数return p; /返回第返回第i个
25、结点个结点算法的时间复杂度为算法的时间复杂度为O(n) (2)按值查找)按值查找 查找单链表中值为查找单链表中值为e的结点,算法描述如下:的结点,算法描述如下: LinkList Locate (LinkList L, ElemType e)/在单链表中查找值为在单链表中查找值为e的结点,并返回该结点的指针的结点,并返回该结点的指针Node *p;p = L - next;/指针指针p初值指向表中第初值指向表中第1个结点个结点while (p != NULL) & (p - data != e) /从表中第从表中第1个结点开始逐个比较个结点开始逐个比较p = p - next;return p
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构完整版课件全套ppt教学教程 最全电子讲义最新 数据结构 完整版 课件 全套 ppt 教学 教程 电子 讲义 最新
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内