陈海明 副教授 信息学院 计算机系 http://www.chenhaiming.cn 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系 http://www.chenhaiming.cn.

Slides:



Advertisements
Similar presentations
index 目次 ( 請按一下滑鼠,解答就會出現喔 !) 接續下頁解答 3-1 極限的概念.
Advertisements

“三生教育”专题 生命·生存·生活.
第7章 樹與二元樹 (Trees and Binary Trees)
主讲:计算机工程学院 李兰 答疑地点:主教学楼B区213
第6章 二叉树和树 前面的章节主要讨论的是线性结构,二叉树和树属于非线性的结构。遍历非线性结构比线性结构要麻烦。
数据结构概论 第2章 线性表 董黎刚 浙江工商大学信电学院
寻觅节日诗情.
第三章 鏈結串列 Linked List.
计算机硕士专业基础—C语言 赵海英
计算机软件技术基础 数据结构与算法(4).
数据结构——树和二叉树 1/96.
第八章 查找.
第十章 内部排序 10.1 概述 10.2 插入排序 直接插入排序 其他插入排序 希尔排序
第二章 线性表 1 线性表的逻辑结构及其基本操作 2 线性表的顺序存储结构 3 线性表的链式存储结构 4 静态链表 5 应用实例.
第二章 线性表.
第2章 线性表 2.1 线性表的概念及运算 2.2 线性表的顺序存储 2.3 线性表的链式存储 2.4 一元多项式的表示及相加.
第8章 查找 数据结构(C++描述).
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
Linked List Operations
單向鏈結串列 Singly Linked Lists.
第2章 线性表 线性结构 是一个数据元素的有序集合。.
第4章 串 串的基本概念和C语言的串函数 串的存储结构 动态数组实现的顺序串 串的模式匹配算法——BF算法 主要知识点.
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
数据结构 Data Structure 主讲人:王国军,郑瑾 中南大学 中南大学信息院计科系
第11章 查找 主要知识点 查找的基本概念 静态查找表 动态查找表 哈希表.
佇列 (Queue).
資料結構 第5章 佇列.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
·线性表的定义及ADT ·线性表的顺序存储结构 ·线性表的链接存储结构 · 单向循环链表 · 双链表、双向循环链表 · 一元多项式的加法
第2章 线性表(三) 1/.
哈夫曼编码.
第12章 樹狀搜尋結構 (Search Trees)
线性表小结 元素之间的线性关系 顺序表 顺序表:元素相邻存储 单链表:后继指针链接 一维数组 给定下标随机存取
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.1 栈 £3.3 队列 £3.2 栈的应用举例 £3.1.1 栈的定义 £3.1.2 栈的顺序存储结构
第三章 栈和队列.
数据结构 Data Structure 中南大学 主讲人:王国军,郑瑾 中南大学信息院计科系
第二章 线性表.
資料結構與C++程式設計進階 堆疊與佇列(Stack & Queue) 講師:林業峻 CSIE, NTU 6/ 21, 2010.
第一章 绪论.
数 据 结 构 Ch.4 串 计 算 机 学 院 肖明军
内容回顾 线性表的定义和特点 线性表的顺序存储及查找、插入和删除.
第九章 查找表 9.1静态查找表 9.2动态查找表 9.3哈希表及其查找.
6.6 Huffman树及其应用 王 玲.
第三章 栈和队列.
第四章串 4.1 串类型定义 4.2 串的表示和实现 4.3 串的模式匹配算法 4.4 串操作应用举例.
第四章 串.
資料結構 第4章 堆疊.
严蔚敏、吴伟民编著 清华大学出版社 学习网站:
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
王玲 第 2 章 线性表 王玲 2019/2/25.
第1章 绪论 2019/4/16.
第7章 樹與二元樹(Trees and Binary Trees)
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
第二章 线性表.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
第 六 讲 栈和队列(一).
中国农业科学院博士后学术论坛 博士后基金申请的经验及体会 中国农业科学院生物技术研究所 秦 华 博士
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
第三章 线性表 3.1 线性表的类型定义 3.2 顺序存储的线性表 3.3 链式存储的线性表 3.4 有序表 3.5 顺序表和链表的综合比较.
Chapter 2 Entity-Relationship Model
本节内容 1.二叉排序树的定义 2.二叉排序树的查找操作 3.二叉排序树的插入操作 4.二叉排序树的删除操作 5.二叉排序树的总结
Presentation transcript:

陈海明 副教授 信息学院 计算机系 http://www.chenhaiming.cn 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系 http://www.chenhaiming.cn

数据结构 线性表 顺序表 链表 线性结构 栈 队列 树结构 图结构 操作系统->进程管理 服务器->进程线程管理 线性表 顺序表 链表 栈 队列 线性结构 操作系统->进程管理 服务器->进程线程管理 人工智能->博弈树 数据挖掘->决策树 多媒体技术->哈夫曼树 树结构 图结构 人工智能->神经网络,贝叶斯网络

线性表的顺序存储(顺序表) 优点: 缺点: 1、不需要额外空间来表示结点的逻辑关系 2、随机存储方便 1、插入/删除效率低 2、需事先确定存储规模

改进的顺序表

线性表的链式存储(链表) 1、初始化链表 2、插入(头部插入,尾部插入,指定位置前插入,指定位置后插入) 3、求链表长度 data ^ … Linklist1 typedef struct _node{ ElemType data; struct _node *next; }Node,*LinkList; 在链表中引入 头指针节点,可以使程序设计更简洁,因为这样可以避免把空表作为一种特殊情况来对待。 1、初始化链表 2、插入(头部插入,尾部插入,指定位置前插入,指定位置后插入) 3、求链表长度 4、查找:按序号/按值(顺链域逐个搜索) 5、删除

链表——初始化 LinkList LinkList1=(LinkList)malloc(sizeof(Node)); memset(LinkList1, 0, sizeof(Node)); Linklist1

链表——插入 Node *pNewNode=(Node *)malloc(sizeof(Node)); pNewNode->data 赋值; 头插法: pNewNode->next=LinkList1->next; LinkList1->next=pNewNode; 尾插法: Node *pNode=LinkList1; while (pNode->next) pNode=pNode->next; pNewNode->next=pNode->next; pNode->next=pNewNode; 指定位置后插入

如何用指定位置后插入实现头插法和尾插法? 链表—插入(指定位置后插入) pNode data ^ … Linklist1 pNewNode data pNewNode->next=pNode->next; pNode->next=pNewNode; 如何用指定位置后插入实现头插法和尾插法?

链表——求长度 Node *pNode=LinkList1->next; int length=0; while (pNode) { length++; pNode=pNode->next; } return length;

链表——查找 按序号 按值 Node *pNode=LinkList1->next; 输入index; /*index从1开始*/ for (int i=1; i<index; i++) pNode=pNode->next; return (pNode); 按值 while (pNode && pNode->data与要找的值不等) { pNode=pNode->next; } If (pNode==NULL) 没有找到;else return (pNode);

链表—插入(指定位置前插入) preNode pNode Node *preNode=LinkList1; data ^ … Linklist1 pNewNode data Node *preNode=LinkList1; while (preNode->next !=pNode) preNode=preNode->next; 指定位置后插入(preNode);

链表—删除 preNode pNode Node *preNode=LinkList1; data ^ … Linklist1 Node *preNode=LinkList1; while (preNode->next !=pNode) preNode=preNode->next; preNode->next=pNode->next; free(pNode);

链表—空间循环利用 删除节点时,将删除的节点插入到spCollector链表中 data ^ … Linklist1 data ^ … SpCollector 删除节点时,将删除的节点插入到spCollector链表中 建立和插入链表时,先看spCollector的长度是否大于0,如果是,则从中获取空间,否则malloc新空间;

链表 ADT LinkList{ } LinkList Initialize(); int Length(LinkList linklist); Node *IndexOfList(LinkList linklist, int index); Node *SearchList(LinkList linklist, T data); Node *SurInsert(Node *pNewNode, Node *pNode); Node *Delete(Node *pNode); void Output(LinkList linklist); }

链表——扩展 单向列表 单向循环列表 双向列表 双向循环列表

单向循环链表 ADT LinkList{ } LinkList Initialize(); int Length(LinkList linklist); Node *IndexOfList(LinkList linklist, int index); Node *SearchList(LinkList linklist, T data); Node *SurInsert(Node *pNewNode, Node *pNode); Node *Delete(Node *pNode); void Output(LinkList linklist); }

单向循环列表——初始化、查找 Node *SearchList(LinkList linklist, T data) { … Linklist1 Node *SearchList(LinkList linklist, T data) { Node* pNode=linklist->next; while (pNode !=linklist && pNode->data !=data) pNode=pNode->next; if (pNode!=linklist) return pNode; } Linklist1

单向循环列表——指定位置后插入 pNode pNode data … Linklist1 pNewNode Node *SurInsert(LinkList linklist, Node *pNewNode, Node *pNode); pNewNode->next=pNode->next; pNode->next=pNewNode; }

作业 1425 1396 2438 完成时间10月7日23:55之前

双向列表和双向循环列表