第 3 讲 线性表(一).

Slides:



Advertisements
Similar presentations
解释下面 “ 将 ” 的意义: ①将进酒( ) ②呼儿将出换美酒( ) ③爷娘闻女来,出郭相扶将( ) ④王侯将相宁有种乎( ) ⑤ 彼所将中国人不过十五六万( ) ⑥一车炭,千余斤,宫使驱将不得惜 ( ) ⑦将子无怒,秋以为期 ( ) 动 词、请 qiāng 动词、拿 jiāng 动词、扶 jiāng.
Advertisements

報告書名:父母會傷人 班級:二技幼四甲 姓名:吳婉如 學號:1A2I0034 指導老師:高家斌
幼 兒 遊 戲 訪 談 組別:第七組 班級:幼保二甲 姓名:4A0I0008劉俐音 4A0I0043吳碧娟 4A0I0059劉又甄 4A0I0060江佳霓 4A0I0061蕭靖霓 4A0I0079王毓君.
人教版语文 三年级下册 语文园地四 作者:佚名 来源:网络.
媽,我們真的不一樣 青少年期與中年期 老師: 趙品淳老師 組員: 胡珮玟4A1I0006 馬菀謙4A1I0040
语文大课堂经典诵读 四年级(上).
主讲:计算机工程学院 李兰 答疑地点:主教学楼B区213
班級:二幼三甲 姓名:郭小瑄 、 詹淑評 學號:1A2I0029 、1A2I0025
数据结构概论 第2章 线性表 董黎刚 浙江工商大学信电学院
指導老師:陳韻如 姓名:吳宜珊 學號:4A0I0911 班級:幼保二乙
傳統童玩遊戲創新 組別:第八組 班級:幼保二甲 組員: 4A0I0005柯舒涵 4A0I0011謝孟真
第十章 内部排序 知识点3:快速排序.
数据结构——树和二叉树 1/96.
数据结构 第6章 树和二叉树 什么是树和二叉树?? 二叉树的遍历 数据结构.
第二章 线性表 1 线性表的逻辑结构及其基本操作 2 线性表的顺序存储结构 3 线性表的链式存储结构 4 静态链表 5 应用实例.
第2章 线性表 2.1 线性表的概念及运算 2.2 线性表的顺序存储 2.3 线性表的链式存储 2.4 一元多项式的表示及相加.
第四章 时间序列的分析 本章教学目的:①了解从数量方面研究社会经济现象发展变化过程和发展趋势是统计分析的一种重要方法;②掌握时间数列编制的基本要求;③理解和掌握水平速度两方面指标的计算及运用④理解和掌握长期趋势分析和预测的方法。 本章教学重点:现象发展的水平指标和速度指标。 本章教学难点:现象变动的趋势分析。
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
数据结构与算法 数据结构与算法实验
Chapter 7 Search.
人教版﹒七年级上册 第四单元 三国两晋南北朝时期:政权分立与民族交融 第17课 西晋的短暂统一和北方各族的内迁.
第2章 线性表 线性结构 是一个数据元素的有序集合。.
数据结构 Data Structure 主讲人:王国军,郑瑾 中南大学 中南大学信息院计科系
佇列 (Queue).
第8章 排序.
第十章 排序.
第9章 排序.
If … else 選擇結構 P27.
第五章 数组和 广义表 数组 稀疏矩阵 广义表.
第五章 数组和广义表.
·线性表的定义及ADT ·线性表的顺序存储结构 ·线性表的链接存储结构 · 单向循环链表 · 双链表、双向循环链表 · 一元多项式的加法
第2章 线性表(三) 1/.
线性表小结 元素之间的线性关系 顺序表 顺序表:元素相邻存储 单链表:后继指针链接 一维数组 给定下标随机存取
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
第2章 线性表 2.1 线性表的基本概念 2.2 线性表的顺序存储 2.3 线性表的链式存储 2.4 线性表的应用 2.5 有序表 本章小结.
第3章 栈和队列(二) 1/.
第2章 线性表 线性表抽象数据类型 顺序表 主要知识点 单链表 循环单链表 循环双向链表 静态链表 设计举例.
1.1 数据结构讨论的范畴 1.2 基本概念 1.3 算法和算法的量度.
第八章 查找表 8.1静态查找表 8.2动态查找表 8.3哈希表及其查找.
本章重点难点 重点:顺序查找、二分查找、二叉排序树查找以及散列表查找的基本思想和算法实现。
第三章 栈与队列 £3.1 栈 £3.3 队列 £3.2 栈的应用举例 £3.1.1 栈的定义 £3.1.2 栈的顺序存储结构
第三章 栈和队列 3.1 栈 3.2 栈的应用举例 3.3 栈与递归的实现 3.4 队列.
第3章 栈和队列(一).
第三章 栈和队列.
数据结构 Data Structure 中南大学 主讲人:王国军,郑瑾 中南大学信息院计科系
第二章 线性表.
第一章 绪论.
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
内容回顾 线性表的定义和特点 线性表的顺序存储及查找、插入和删除.
第9章 内部排序 9.1 概述 9.2 插入排序 9.3 快速排序 9.4 选择排序 9.5 归并排序 9.6 基数排序
数据结构 第9章 查找 什么是查找?? 静态查找 动态查找 哈希表 数据结构.
第九章 查找表 9.1静态查找表 9.2动态查找表 9.3哈希表及其查找.
第三章 栈和队列.
第四章串 4.1 串类型定义 4.2 串的表示和实现 4.3 串的模式匹配算法 4.4 串操作应用举例.
第四章 串.
資料結構 第4章 堆疊.
严蔚敏、吴伟民编著 清华大学出版社 学习网站:
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
王玲 第 2 章 线性表 王玲 2019/2/25.
3.1 线性表及逻辑结构 3.2 线性表的顺序存储 3.3 线性表的链式存储 3.4 链式存储结构的应用
C语言版 软件与理论教研室 张泽宝 哈尔滨工程大学计算机科学与技术学院.
第6章 数组与广义表 6.1 数组的定义及其基本操作 6.2 数组的顺序存储结构 6.3 矩阵的压缩存储 6.4 广义表的概念
第二章 线性表.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第 六 讲 栈和队列(一).
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
第三章 线性表 3.1 线性表的类型定义 3.2 顺序存储的线性表 3.3 链式存储的线性表 3.4 有序表 3.5 顺序表和链表的综合比较.
Chapter 2 Entity-Relationship Model
本节内容 1.二叉排序树的定义 2.二叉排序树的查找操作 3.二叉排序树的插入操作 4.二叉排序树的删除操作 5.二叉排序树的总结
安排座位.
Presentation transcript:

第 3 讲 线性表(一)

教学目标 了解线性表的特点; 了解线性表在逻辑结构层次上的定义及其抽象数据类型表示; 掌握线性表的顺序存储结构及两种不同存储类型的描述; 熟练掌握在顺序存储结构上实现线性表的插入和删除等操作。 2/16

线性结构的特点 存在唯一的一个首元素,该元素没有直接前驱; 存在唯一的一个尾元素,该元素没有直接后续; 除第一个元素外,有且仅有一个直接前驱; 除最后一个元素之外,有且仅有一个直接后继。 3/13

线性表的类型定义 线性表的定义 线性表是具有相同数据类型的 n (n>=0)个数据元素的有限序列,记为 (a1,a2,… ai-1,ai,ai+1,…an)。 其中n为表长, n=0 时称为空表;i为数据元素ai在线性表中的位序,ai是ai+1的直接前驱, ai+1是ai 的直接后继。 举例说明 La=(34,89,765,12,90,-34,22) Ls=(Hello,World, China, Welcome) Lb=(book1,book2,...,book100) ,其中 struct bookinfo{ int No; char *name; char *auther; …} 4/13

抽象数据类型线性表的定义 }ADT List ADT List{ 数据对象:D={ai|ai∈ElemSet,i=1,2,…,n,n≥0}   数据关系:R={R1} R1={<ai-1,ai>|ai-1,ai∈D,i=2,…,n}   基本操作: InitList(&L) 操作结果:构造一个空的线性表L DestroyList(&L) 初始条件:线性表L已存在 操作结果:销毁线性表L ClearList(&L) 操作结果:将线性表L清为空表 … }ADT List 5/13

线性表的顺序表示和实现 静态顺序表 动态顺序表 顺序存储结构 物理地址计算公式 Loc(ai)=Loc(a1)+(i-1)*d 1<=i<=n 顺序存储结构分类 静态顺序表 动态顺序表 6/16

说明 预定义常量和类型 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef in Status;

顺序表的类C语言描述 #define MAXSIZE 1000 静态顺序表 ElemType elem[MAXSIZE]; typedef struct{ ElemType elem[MAXSIZE]; int length; } SqList; 动态顺序表 ElemType *elem; int length; // 当前长度 8/16

初始化操作 #define MAXSIZE 1000 // 线性表存储空间的初始分配量 Status InitList_Sq(SqList &L) {// 构造一个空的线性表L。 L.elem= (ElemType*)malloc(MAXSIZE *sizeof(ElemType)); if (!L.elem) exit(OVERFLOW); // 存储分配失败 L.length = 0; // 长度为0 return OK; } // InitList_Sq 9/16

取值操作 Status GetElem (SqList L, int i, ElemType & e) { if(i<1||i>L.length) return error; e = L.elem[i-1]; return OK; } 10/16

查找操作 Status LocateElem (SqList L, ElemType e) { for(int i=0; i<L.length; i++) if(L.elem[i]==e) return i+1; return error; } 11/16

插入 定义:线性表的插入是指在第i(1i  n+1)个元素之前插入一个新的数据元素x,使长度为n的线性表 变成长度为n+1的线性表 需将第i至第n共(n-i+1)个元素后移

e 内存 a1 a2 ai ai+1 an 1 i-1 数组下标 n-1 i n 2 元素序号 i+1 n+1 内存 a1 a2 ai 1 i-1 数组下标 n-1 i n 2 元素序号 i+1 n+1 内存 a1 a2 ai ai+1 an 1 i-1 数组下标 n-1 i n 2 元素序号 i+1 n+1 an-1 e

插入算法 Status insertsqlist(SqList L, int i, ElemType e ) int j; if(L.length+1> MAXSIZE ) return error; else if(i<1||i>L.length+1) else { for(j=L.length-1; j>=i-1; j--) L.elem[j+1] = L. elem[j]; L. elem[i-1] = e; L.length = L.length+1; } return OK;

算法时间复杂度T(n) 设Pi是在第i个元素之前插入一个元素的概率,则在长度为n的线性表中插入一个元素时,所需移动的元素次数的平均次数为:

删除 定义:线性表的删除是指将第i(1i  n)个元素删除,使长度为n的线性表 变成长度为n-1的线性表 需将第i+1至第n共(n-i)个元素前移

内存 a1 a2 ai ai+1 an 1 i-1 数组下标 n-1 i n 2 元素序号 i+1 n+1 内存 a1 a2 ai+1 数组下标 1 i-1 n-2 i n-1 2 元素序号 i+1 n an ai+2

删除算法 Status ListDelete(SqList &L, int i) {//删除顺序表第i个位置元素 int j; if(i<1||i>L.length) return error; else { for(j=i; j<=L.length-1; j++) L. elem[j-1] = L. elem[j]; L.length = L.length-1; } return OK;

故在顺序表中插入或删除一个元素时,平均移动表的一半元素,当n很大时,效率很低 算法评价 设Qi是删除第i个元素的概率,则在长度为n的线性表中删除一个元素所需移动的元素次数的平均次数为: 故在顺序表中插入或删除一个元素时,平均移动表的一半元素,当n很大时,效率很低

顺序存储结构的优缺点 优点 逻辑相邻,物理相邻 可随机存取任一元素 存储空间使用紧凑 缺点 插入、删除操作需要移动大量的元素 预先分配空间需按最大空间分配,利用不充分

小结 本讲主要介绍了线性表的两种顺序存储结构以及顺序线性表初化、取值、查找、插入和删除操作的实现。重点介绍插入和删除操作在顺序表上的实现。 21/16

作业 编写程序实现线性表顺序存储结构的基本操作:初始化、插入、删除、打印、求长度等操作。 22/16