第三章 线性表 3.1 线性表的类型定义 3.2 顺序存储的线性表 3.3 链式存储的线性表 3.4 有序表 3.5 顺序表和链表的综合比较.

Slides:



Advertisements
Similar presentations
聆听美的声音 第一篇 听雨轩 表达意志和理想的诗,一般都显得壮阔铿锵,而描写乡愁和爱情的作品,一般都显得细腻而柔绵。 阅读领航第3小组
Advertisements

中小学教育网课程推荐网络课程 小学:剑桥少儿英语 小学数学思维训练 初中:初一、初二、初三强化提高班 人大附中同步课程
主讲:计算机工程学院 李兰 答疑地点:主教学楼B区213
06学年度工作意见 2006年8月30日.
数据结构概论 第2章 线性表 董黎刚 浙江工商大学信电学院
机械制造工艺的基础知识 -基本概念 生产过程 工艺过程 机械加工工艺过程.
第四章 借贷记账法 在制造业中的应用.
第三章 鏈結串列 Linked List.
数据结构——树和二叉树 1/96.
第六章 树和二叉树.
第二章 线性表 1 线性表的逻辑结构及其基本操作 2 线性表的顺序存储结构 3 线性表的链式存储结构 4 静态链表 5 应用实例.
第二章 线性表.
第2章 线性表 2.1 线性表的概念及运算 2.2 线性表的顺序存储 2.3 线性表的链式存储 2.4 一元多项式的表示及相加.
第四章 时间序列的分析 本章教学目的:①了解从数量方面研究社会经济现象发展变化过程和发展趋势是统计分析的一种重要方法;②掌握时间数列编制的基本要求;③理解和掌握水平速度两方面指标的计算及运用④理解和掌握长期趋势分析和预测的方法。 本章教学重点:现象发展的水平指标和速度指标。 本章教学难点:现象变动的趋势分析。
第8章 查找 数据结构(C++描述).
第1节 光的干涉 (第2课时).
第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案. 第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案.
Linked List Operations
Chapter 5 Tree & Binary Tree
單向鏈結串列 Singly Linked Lists.
第2章 线性表 线性结构 是一个数据元素的有序集合。.
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
数据结构 Data Structure 主讲人:王国军,郑瑾 中南大学 中南大学信息院计科系
資料結構 第5章 佇列.
第9章 排序.
第三章 线性表 3.1 线性表的类型定义 3.2 顺序存储的线性表 3.3 链式存储的线性表 3.4 有序表 3.5 顺序表和链表的综合比较.
第五章 数组和 广义表 数组 稀疏矩阵 广义表.
·线性表的定义及ADT ·线性表的顺序存储结构 ·线性表的链接存储结构 · 单向循环链表 · 双链表、双向循环链表 · 一元多项式的加法
第2章 线性表(三) 1/.
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
第2章 线性表 2.1 线性表的基本概念 2.2 线性表的顺序存储 2.3 线性表的链式存储 2.4 线性表的应用 2.5 有序表 本章小结.
第2章 线性表 线性表抽象数据类型 顺序表 主要知识点 单链表 循环单链表 循环双向链表 静态链表 设计举例.
第十章 C高级程序应用—链表* 10.1链表的基本概念 10.2单向链表 10.3双向链表 10.4应用举例.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第3章 堆栈和队列 堆栈 堆栈应用 队列 队列应用 优先级队列 主要知识点.
第八章 查找表 8.1静态查找表 8.2动态查找表 8.3哈希表及其查找.
第 3 讲 线性表(一).
第3章 栈和队列(一).
第三章 栈和队列.
数据结构 Data Structure 中南大学 主讲人:王国军,郑瑾 中南大学信息院计科系
第二章 线性表.
第一章 绪论.
数 据 结 构 Ch.4 串 计 算 机 学 院 肖明军
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
内容回顾 线性表的定义和特点 线性表的顺序存储及查找、插入和删除.
第二章 线性表 2.1 线性表的类型定义 2.2线性表的顺序存储 2.3线性表的链式存储 2.4一元多项式的表示和相加.
第9章 内部排序 9.1 概述 9.2 插入排序 9.3 快速排序 9.4 选择排序 9.5 归并排序 9.6 基数排序
第四讲 线性表(三) 1/.
数据结构 第9章 查找 什么是查找?? 静态查找 动态查找 哈希表 数据结构.
第九章 查找表 9.1静态查找表 9.2动态查找表 9.3哈希表及其查找.
第三章 栈和队列.
資料結構 第4章 堆疊.
数据结构 第八章 查找.
严蔚敏、吴伟民编著 清华大学出版社 学习网站:
第三章 链表 单链表 (Singly Linked List) 循环链表 (Circular List) 多项式及其相加
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
王玲 第 2 章 线性表 王玲 2019/2/25.
3.1 线性表及逻辑结构 3.2 线性表的顺序存储 3.3 线性表的链式存储 3.4 链式存储结构的应用
第三章 链表 单链表 循环链表 多项式及其相加 双向链表 稀疏矩阵.
7.1 广义表的概念 广义表是n(n≥0)个数据元素组成的序列,其中每个数据元素或是单个数据元素(简称原子),或仍然是一个广义表 。
第五章 递归与广义表 递归的概念 递归过程与递归工作栈 递归与回溯 广义表.
第二章 线性表.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
树和二叉树(一).
第 六 讲 栈和队列(一).
戒波罗蜜多.
算法3.3 void InitList_sq(SqList &L,int msize=LIST_INIT_SIZE)
Chapter 2 Entity-Relationship Model
第六章 复合数据类型 指针的声明与使用 数组的声明与使用 指针与数组的相互引用 字符串及相关库函数 new与delete
Presentation transcript:

第三章 线性表 3.1 线性表的类型定义 3.2 顺序存储的线性表 3.3 链式存储的线性表 3.4 有序表 3.5 顺序表和链表的综合比较

3.1线性表的类型定义 3.1.1线性表的定义 线性表是n(n>=0)个数据元素的有限序列,表中各个元素具有相同地属性,表中相邻元素间存在“序偶”关系。 记做:(a1,a2,…….ai-1,ai,ai+1,…,an-1,an ) ai-1称为ai 的直接前驱元素,ai+1是ai的直接后继元素 线性表的长度:表中的元素个数 n 位序:i称元素ai在线性表中的位序

3.1.2线性表的基本操作 InitList(&L) Destroy(&L) ClearList(&L) ListEmpty(L) ListLength(L) GetElem(L,i,&e) 1<=i<= ListLength (L) LocateItem(L,e) PriorElem(L,Cur_e,&pre_e) NextElem(L,cur_e,&next_e) ListInsert(&L,i,e) 1<=i<= ListLength (L)+1 ListDelete(&L,i,&e) 1<=i<= ListLength (L) ListTraverse(L)

【例3.4】对两个线性表La、Lb表示的集合A和B,求一个新集合A=AUB 算法3.1 若La中不存在,则将其插入La,重复直至Lb空 【例3.5】对两个线性表La、Lb表示的集合A和B ,求A=A-B 算法3.2 若La中存在,则将从La删除,重复直至Lb空

3.2线性表的顺序表示和实现 3.2.1顺序表——线性表的顺序存储表示 Const LISTINCREMENT=10; Const LIST_INIT_SIZE=100; (C++规范) Const LISTINCREMENT=10; #define LIST_INIT_SIZE 100 (C规范) Typedef Struct { Elemtype * elem; Int length; Int listsize; Int incrementsize; }SqList;

3.2.2顺序表中基本操作的实现 Ein=Σpi(n-i+1)=n/2 Edl=Σqi(n-i)=(n-1)/2 初始化操作 InitList_Sq 算法3.3 销毁操作 DestroyList_Sq 算法3.4 是否为空 ListEmpy_Sq 算法3.5 是否满 ListFull_Sq 算法3.6 求长度 ListLength_sq 算法3.7 查找元素操作 LocateElem_Sq 算法3.8 获取元素操作 GetItem_Sq 算法3.9 插入元素操作 ListInsert_Sq 算法3.10 时间复杂度O(n) 删除元素操作 ListDelete_Sq 算法3.11 时间复杂度O(n) 插入和删除操作的时间分析: Ein=Σpi(n-i+1)=n/2 Edl=Σqi(n-i)=(n-1)/2

查找元素操作 算法3.8 时间复杂度O(n)

插入元素操作 算法3.10 时间复杂度O(n)

删除元素操作 算法3.11 时间复杂度O(n)

3.2.3顺序表其它算法举例 例3.6 用顺序表表示集合,完成例3.1。 算法3.13 时间复杂度O(n2) 例3.10 用尽量少得辅助空间将前m个元素和后n个元素互换 算法3.25 exchange1 时间复杂度:O(m×n) 算法3.26 invert 时间复杂度:O(t-s+1) 算法3.27 exchange2 时间复杂度:O(m+n)

3.3线性表的链式表示和实现 3.3.1单链表和指针 typedef struct Lnode{ 数据域(data)和指针域(next) 存储表示 typedef struct Lnode{ ElemType data; Struct Lnode *next; }Lnode, *LinkList;

单链表种类 不带头结点单链表 带头结点单链表

常见指针操作

3.3.2单链表的基本操作 求线性表的长度 算法3.15时间复杂度:O(n)

查找元素操作 算法3.16时间复杂度:O(n)

插入结点操作 :前插、后插 算法3.17 时间复杂度:前插O(n)、后插O(1)

删除结点操作 算法3.18 时间复杂度O(n)

3.3.3单链表的其它操作举例 逆序创建链表 时间复杂度O(n)

逆置单链表 时间复杂度O(n)

以单链表表示集合,完成例3.1 算法3.19时间复杂度O(m×n) void union_L( LinkList &La, LinkList &Lb ) { if (!La) La = Lb;return; while ( Lb ) { s = Lb; Lb = Lb->next; p = La; while ( p && p->data != s ->data ) { pre = p; p = p->next; }//while if ( p ) delete s; else { pre->next = s; s->next = NULL;} }// while(Lb) }// union_L

【算法改进】Lb中元素只需要和原La元素比较 void union_L( LinkList &La, LinkList &Lb ) { if (!La) La = Lb;return; pa=La; while ( Lb ) { s = Lb; Lb = Lb->next; p = pa; while ( p && p->data != s ->data )p =p->next; if ( p) delete s; else {s->next=La; La=s} }// while(Lb) }// union_L

3.3.4循环链表 什么是循环链表 判断表尾的循环条件: 通常增加头结点 最后一个结点的指针指向头结点 头指针指向最后一个结点 空的循环链表是头结点自循环 判断表尾的循环条件: 不是p==NULL,而是p是否等于头指针的next域。

3.3.5双向链表 概念:两个指针,分别指向前驱和后继 typedef struct DuLnode{ ElemType data; Struct DuLnode *prior; Struct DuLnode *next; }DuLnode, *DuLinkList;

插入结点操作 算法3.21 时间复杂度O(1)

删除结点操作 算法3.22 时间复杂度O(1)

单链表的实际应用改进 typedef struct { 例3.8 改写逆序创建链表算法 :算法3.23 L.head=NULL; LinkList head,tail; int length; }AdvancedLinkList; 例3.8 改写逆序创建链表算法 :算法3.23 L.head=NULL; for(i=n-1; i>=0; i--){ s=new LNode; s->data=A[i]; s->next=L.head; L.head=s; if(i=n-1)L.tail=s; L.length++; }

3.4有序表 什么是有序表 插入结点操作 例3.9 以顺序表表示集合,完成集合的纯化 数据元素在线性表中依值非递减或非递增的 时间复杂度 O(n) 例3.9 以顺序表表示集合,完成集合的纯化 算法3.24 时间复杂度 O(n)

例3.11 两个带头结点的循环有序链表,表示集合A、B,完成C=A U B 算法 复杂度 O(n+m) 算法3.28 在头元素中放最大元素MAX 简化操作 ,时间复杂度 O(n+m), 时间略长,算法表达略简单 类似:两个带头结点的有序单链表,表示集合A、B,判断A=B? 对比:无序表完成同样功能的时间复杂度为O(n*n)

3.5顺序表和链表的综合比较 线性表的长度能否预先确定?处理过程中变化范围如何? 对线性表的操作形式如何? 长度确定、变化小时用顺序表 长度变化大、难以估计最大长度时宜采用链表 对线性表的操作形式如何? 查询操作多、删除和插入操作少时使用顺序表 频繁插入和删除操作宜采用链表