第 四 讲 线性表(二).

Slides:



Advertisements
Similar presentations
数据结构概论 第2章 线性表 董黎刚 浙江工商大学信电学院
Advertisements

組長:黃家逸 組員:殷浩賢、楊煜、吳家朗 毒品的害處.
第二章 线性表 £2.4 线性表的应用 £2.1 线性表的类型定义 £2.2 线性表的顺序存储结构 £2.3 线性表的链式存储结构
第二章 线性表 2.1 线性表的逻辑结构 一. 线性表定义如下:
第二章 线性表 ⒈教学内容:2.1 线性表逻辑结构; 2.2 线性表的顺序存储及运算实现; 2.3 线性表的链式存储和实现。
第二章 线性表 1 线性表的逻辑结构及其基本操作 2 线性表的顺序存储结构 3 线性表的链式存储结构 4 静态链表 5 应用实例.
第二章 线性表.
第2章 线性表 2.1 线性表的概念及运算 2.2 线性表的顺序存储 2.3 线性表的链式存储 2.4 一元多项式的表示及相加.
Linked List Operations
第2章 线性表 线性结构 是一个数据元素的有序集合。.
其他类型的链表主要内容 静态链表 循环链表 双向链表.
主要内容: 1.第一部分 概述 2.第二部分 线性表、栈、队列
计算机软件技术基础 数据结构与算法(2).
第三章 栈和队列 Stack and Queue
第二章 线性表 线性表 顺序表 链表 顺序表与链表的比较.
数据结构 第2章 线性表 吴忠华.
数 据 结 构 Ch.2 线性表 计 算 机 学 院 肖明军
第三章 线性表 3.1 线性表的类型定义 3.2 顺序存储的线性表 3.3 链式存储的线性表 3.4 有序表 3.5 顺序表和链表的综合比较.
第2章 线性表(三) 1/.
数据结构 第二章 线性表.
制作:崔广才
数据结构 Data Structure 中南大学 主讲人:王国军,郑瑾 中南大学信息院计科系
教 师:曾晓东 电 话: E_mail: 计算机软件技术基础 教 师:曾晓东 电 话: E_mail:
第2章 线性表 2.1 线性表的基本概念 2.2 线性表的顺序存储 2.3 线性表的链式存储 2.4 线性表的应用 2.5 有序表 本章小结.
第3章 栈和队列(二) 1/.
本 章 说 明 2.1 线性表的类型定义 2.2 线性表的顺序表示和实现 2.3 线性表的链式存储结构 2.4 循环链表和双向链
西安交通大学计教中心 ctec.xjtu.edu.cn
第2章 线性表 线性表抽象数据类型 顺序表 主要知识点 单链表 循环单链表 循环双向链表 静态链表 设计举例.
第 1 章 数据结构 1.1 基本数据结构与算法 1.2 线性表 1.3 栈和队列 1.4 树和二叉树 1.5 查找 1.6 内部排序 65
第2章 线性表 2.1 线性表 2.2 顺序表 2.3 单链表 2.4 循环单链表 2.5 双向链表 2.6 仿真链表
第2讲 绪论(二).
第2章 线性表 丽水学院工学院.
第2章 线性表 2.1 线性表的类型定义 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 2.4 一元多项式的表示.
线性表是一种最简单的线性结构 线性结构的基本特征为: 线性结构 是 一个数据元素的有序(次序)集 1.集合中必存在唯一的一个“第一元素”;
第三章 栈与队列 £3.1 栈 £3.3 队列 £3.2 栈的应用举例 £3.1.1 栈的定义 £3.1.2 栈的顺序存储结构
第三章 栈和队列.
第二章 线性表.
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
内容回顾 线性表的定义和特点 线性表的顺序存储及查找、插入和删除.
第二章 线性表 2.1 线性表的类型定义 2.2线性表的顺序存储 2.3线性表的链式存储 2.4一元多项式的表示和相加.
(知识点三) 2.3 线性表的链式表示和实现 本节将介绍线性表的另一存储结构—— 链式存储及其对应的操作。
线性表练习.
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
严蔚敏、吴伟民编著 清华大学出版社 学习网站:
顺序表的插入.
王玲 第 2 章 线性表 王玲 2019/2/25.
第2章 线性表 本章主要介绍下列内容 线性表的定义和基本操作 线性表的顺序存储结构 线性表的链式存储结构 线性表的应用举例.
第二章 线性表.
3.1 线性表及逻辑结构 3.2 线性表的顺序存储 3.3 线性表的链式存储 3.4 链式存储结构的应用
严蔚敏、吴伟民编著 清华大学出版社 学习网站:中国网页设计
顺序表的删除.
单链表的基本概念.
顺序查找.
线性结构 线性结构的特点: 线性结构的种类 在数据元素的非空有限集中, (1)存在唯一的一个被称做“第一个”的数据元素;
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
第二章 线性表.
第三章 数据组织与处理.
第 六 讲 栈和队列(一).
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
第七讲 栈和队列(二) 1/.
第三章 线性表 3.1 线性表的类型定义 3.2 顺序存储的线性表 3.3 链式存储的线性表 3.4 有序表 3.5 顺序表和链表的综合比较.
第15讲 链表 计算机与通信工程学院.
C语言程序设计 第9章 结构体.
算法3.3 void InitList_sq(SqList &L,int msize=LIST_INIT_SIZE)
Chapter 2 Entity-Relationship Model
第二章 线性表 线性表是一种最简单的线性结构 线性结构是一个数据元素的有序(次序)集.
第二部分 数据结构—— 用面向对象方法与C++描述.
本节内容 1.二叉排序树的定义 2.二叉排序树的查找操作 3.二叉排序树的插入操作 4.二叉排序树的删除操作 5.二叉排序树的总结
第二章 线性表 东南大学计算机学院 方效林 本课件借鉴了清华大学殷人昆老师 和哈尔滨工业大学张岩老师的课件.
Presentation transcript:

第 四 讲 线性表(二)

教学目标 理解线性表的链式存储结构; 掌握链式线性表中的结点类型定义; 熟练掌握线性表的基本操作在链式存储结构上实现; 理解循环链表和双向链表的基本概念及其操作。 2/19

2.3 线性表的链式表示与实现 a1 a2 an a3 … 数据元素和结点 数据域和指针域 单向链表 3/19

头指针、空指针和头结点 头指针 空指针 头结点 L a1 a2 a3 L a1 a2 a3 4/19

结点类型定义 a1 a2 an a3 … data next typedef struct LNode{ ElemType data; struct LNode *next; }LNode, *LinkList; 讨论:LNode与LinkList的区别是什么? 5/19

初始化操作 Status InitList(LinkList &L){ L = (LinkList) malloc(sizeof(LNode)); if (L==NULL) return 0; L->next = NULL; return OK; } L 算法的时间复杂度为:O(1)。 6/19

查询操作GetElem(L, i, &e) 算法的时间复杂度为:O(ListLength(L))。 Status GetElem_L(LinkList L, int i, ElemType &e) { // L为带头结点的单链表的头指针。取得第i个数据元素给e,成功返回OK,否则返回ERROR p = L->next; j = 1; // 初始化 while (p!=NULL && j<i) { // 顺指针向后查找第i个元素 p = p->next; ++j; } if ( !p ||j>i) return ERROR; // 第i个元素不存在 e = p->data; // 取第i个元素 return OK; } // GetElem_L j=1 算法的时间复杂度为:O(ListLength(L))。 7/19

插入操作ListInsert(&L, i, e) s=(LinkList)malloc(sizeof (LNode)); s->data = e; s->next = p->next; p->next = s; s 8/19

Status ListInsert_L(LinkList &L, int i, ElemType e) // 在带头结点单链表L中第i个数据元素之前插入数据元素e p = L; j = 0; // 初始化 while (p && j < i-1) { p = p->next; ++j; } // 寻找第i-1个结点 if (!p || j > i-1) return ERROR; // i小于1或者大于表长 s = (LinkList) malloc ( sizeof (LNode)); // 生成新结点 s->data = e; s->next = p->next; p->next = s; // 插入L中 return OK; } // LinstInsert_L 算法的时间复杂度为:O(ListLength(L))。 思考题:如果没有头结头,则应该如何实现? 9/19

删除操作ListDelete_L(&L, i, &e) q = p->next; p->next = p->next->next; e=q->data; free(q); ^ 10/19

Status ListDelete_L(LinkList &L,int i,ElemType &e)  //在带头结点的单链表 L 中删除第 i 个结点,并用 e 返回该结点中 //数据元素的值,查找第 i 个结点并使 p 指向其直接前趋  p=L; j=0; // 初始化 while (p&&j<i-1) {p=p->next; ++j;}  if (p==NULL||j>i-1) return ERROR; // i 值非法 if(p->next != NULL){  q=p->next; //令 q 指向待删结点  p->next=q->next; //在链表中删除结点  e=q->data; //用 e 返回被删结点中元素值  free(q); //释放空间 }  return OK; }//ListDelete_L 算法的时间复杂度为:O(ListLength(L))。 11/19

在链表的头部插入结点建立单链表 Status Creat_LinkList((LinkList &L,int n){ // 输入数据建立单链表,要求从头部插入结点 L = (LinkList) malloc(sizeof(LNode)); L->next=NULL; // 初始化 for(i=n; i>0; i--) { p = (LinkList) malloc(sizeof(LNode)); scanf (& p->data ); p->next=L->next; L->next=p; } return OK; 12/19

链式存储结构的优缺点 链式存储结构的优点是插入和删除操作不需要移动大量结点。 链式存储结构的缺点是必须从链表头部开始顺序查找 。 13/19

循环链表 单向链表 p->next!=NULL 循环链表p->next==head 单向链表与循环链表的主要区别是循环结束条件不同 单向链表 p->next!=NULL 循环链表p->next==head 14/19

双向链表 typedef struct DuLNode { ElemType data; // 数据域 struct DuLNode *pre; // 指向前驱的指针域 struct DuLNode *next; // 指向后继的指针域 } DuLNode, *DuLinkList; 15/19

双向链表的插入操作 s = (DuLinkList)malloc(sizeof(DuLNode)); s->next = p->next; p->next->pre = s; s->pre = p; p>next = s; 16/19

双向链表的删除操作 q=p->next; p->next=q->next; q->next->pre=p; free(q); 17/19

小结 本讲主要介绍了线性链表的基本概念以及插入和删除等基本操作在线性链表上的实现,循环链表和双向链表的基本概念及其基本操作。重点介绍了头结点的作用以及插入和删除操作在线性链表上的实现。 18/19

作业与实验 作业 实验 设链式线性表中的数据已递增有序,要求设计一个算法将数据x插入到线性表的适当位置上以保持线性表的有序性。 编写程序创建一个保存学生基本信息的单链表,实现学生信息的插入、删除、查看等功能。 实验 实验一:线性表的基本操作及其应用 19/19