第十章 C高级程序应用—链表* 10.1链表的基本概念 10.2单向链表 10.3双向链表 10.4应用举例.

Slides:



Advertisements
Similar presentations
校园及周边治安防范 暨应急预案桌面演练 实 训 乐山应急管理学会 贾 伟. 目 录 校园治安问题包含的内容 校园治安问题的特点 避免引发校园治安问题的对策 校园应急预案桌面演练实训 校园治安问题的成因.
Advertisements

“ 我不能 上学了,我 每天还要帮 家里拾柴火 呢。 ” 给远方的小学生写一封信 书信的基本格式: 开头顶格写称呼,打上冒号; 换行空两格写问候语; 接下来换行空两格写正文部分; 正文结束后,换行写祝颂语; 最后在右下方写上寄信人姓名和 写信日期。
中醫藥就醫用藥 - 婦女篇 中醫藥安全衛生教育資源中心 中醫藥就醫用藥百分百、就是藥做到: 停、看、聽、選、用專業.
下背痛 林口長庚醫院內科 住院醫師 毛畯台. 下背痛常見原因 軟組織受傷/背部筋膜發炎 椎間盤突出症 脊椎退化性關節炎 壓迫性骨折 椎間盤滑脫 惡性腫瘤 泌尿道疾患 姿勢不良.
華德學校上午校 「協助小學中國語文科教師建立專業學習型社群」計劃 (2008) 總結分享會 二零零九年一月十日.
图说 毕业生档案 学生工作部 2016 年 5 月. 毕业生档案 毕业前 文字记载 书面材料 家庭情况政治思想 身体状况学习成绩 高校毕业前文字记载的书面材料 用人单位选拔、聘用毕业生的重 要人事依据 工作后人事档案的基础和雏形 什么是毕业生档案?
園藝二乙 1 號 丁楷儒 32 號 孫子恩. 1. 福山萵苣 ( 大陸妹 ) : 福山萵苣,萵苣家族成員之一,鮮甜脆綠又帶有萵苣類的 特殊苦味,用來代替生菜搭配烤肉也別具風味。極少病蟲 害,只需定時澆水施肥就能健康長大,是相當容易種植又 能有大收穫的蔬菜 。 感想: 雖然大陸妹好吃又好種,但種了太多而吃不完.
南宁市中小学生学籍信息化管理系统 用户培训手册
第五单元 口语交际和作文.
第八章 負債 8-1 負債之意義及內容 8-2 流動負債 8-3 長期負債 8-4 其他負債.
工业财务状况表 财务部分培训 (2010年年报).
報告者:蕭曄鴻 班級:溫馨甲孝 指導教授:李開濟博士
无锡商业职业技术学院 机电工程学院党总支孙蓓雄
2016年全国中级会计资格考试 经济法 主讲老师:葛江静.
南京市中等职业学校 2013级人才培养方案 编制说明.
單元名稱: 健康的兩性交往.
定海区渔农村集体资产 股份合作制改革工作 档案管理培训班
北京市工作居住证办理讲解.
全面了解入党程序 认真履行入党手续 第一讲 主讲人:陈亭而.
中共湖北大学知行学院委员会党校 入党材料规范填写指导 学工处 李华琼 二〇一三年十二月.
云南财经大学2010年党员发展培训—— 党员发展工作培训 校党委组织部 2010年9月17日.
“三生教育”专题 生命·生存·生活.
祝贺您获得国家留学基金资助 请您登陆“国家留学网”查看《出国留学人员须知》,您在出国前及在外学习期间所需要办理的手续及具体流程,以及可能遇到的政策上疑问均在此《须知》上有所列明。
实际问题与一元二次方程(一).
审题与立意 夏邑高中高四语文组.
述职报告 ( 二○○七年度 ) 述职人: xxx 部 门: 计划财务部 岗 位: 部门经理.
转正述职报告 电商文案策划 XXX.
护患沟通技巧 护理部 马红云.
一、會計循環之意義 二、會計憑證概要 三、日記簿概要 四、分類帳概要
努力做好新常态下 反映社情民意信息工作 省政协研究室 欧阳东 2016年5月31日.
第三讲 事务性文书的写作 (计划 总结 调查报告 ).
教育部補助計畫經費動支應行注意事項 報告單位:主 計 室 104年10月.
寻觅节日诗情.
思想道德修养与法律基础 主讲人:XXX.
特种设备安全法简介 中原油田分公司 杜习广 2015年4月 视频.
我 自我介绍 我爱看的 书 名片 格言.
马街乡综治维稳工作情况汇报 汇报人:xxx.
第三課 宗教(倫理)的獨特向度 單元 3.2 全球倫理:兩項原則和四項座右銘
农事学实践教程 主讲:XXXX 作物繁种技术.
通病文章 休 闲   今天天气真好,晴空万里,天上飘着朵朵白云。(偶可从没见过这样的情景^_^)我和同学小刚一起骑车去上学,突然他的车气门芯坏了,我就把我车上的拔下来给他装上,我俩继续一起高高兴兴地骑车往学校赶。(原来“我”的自行车可以不用气门芯啊^_^)   我们经过一家百货商店时,我不禁感慨道:啊!看来人民生活水平的确提高了,你看那位农民老大爷,左手一台电冰箱,右手一台电视机,一溜小跑回家去了。(比周星弛在《功夫》里还要厉害?!)都说一心不能二用,当我注视老大爷的时候,冷不丁岔道里冲出来一位老太太,说
第八章 诉讼法 第一节 诉讼法概述 第二节 民事诉讼法 第三节 行政诉讼法 第四节 刑事诉讼法.
科學與科技課程 教師分享會 二OO四年五月七日.
第三章 鏈結串列 Linked List.
应如何深化普通高中学生综合素质评价 北京教科院基础教育研究所 赵学勤 2010、12、14-15.
追问课堂,寻求效益 —有效教学的几点思考 牟平区实验小学 战丽娜.
第二章 线性表.
普及纳米知识 推动科技进步.
电商2班 第五组. 电商2班 第五组 小组成员: 组长:汤昀 成员:杨阳、陆萍、邹斯斯、吴晓庆、吴盈盈.
陈 汉 文 厦门大学会计系 主任 经济学教授 博士生导师
我真的很不想活,日子過得太沒有意思了。. 我真的很不想活,日子過得太沒有意思了。 聽起來,你現在的日子真難熬,你 願意說說看為什麼嗎?
让道德之花越开越鲜艳 主讲 xxx.
老员工心态管理.
平昌县泥龙初中校本培训 中小学微型课题研究
第二章 信息的获取 2.1 获取信息的过程与方法.
通 知 通知是批转下级机关的公文,转发上级机关和不相隶属机关的公文,传达要求下级机关办理和需要有关单位周知或执行的事项,任免人员时使用的公文。
二、感谢信的种类 根据寄送对象不同,感谢信可以分为三种: 1、直接寄送给感谢对象; 2、寄送对方所在单位有关部门或在其单位公开张贴; 3、寄送给广播电台、电视台、报社、杂志社等媒体公开播发。
热烈祝贺医院开业.
產品責任險的意義 想一想,什麼是「產品責任險」? Q
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第2章 线性表 线性表抽象数据类型 顺序表 主要知识点 单链表 循环单链表 循环双向链表 静态链表 设计举例.
第3章 堆栈和队列 堆栈 堆栈应用 队列 队列应用 优先级队列 主要知识点.
内容回顾 线性表的定义和特点 线性表的顺序存储及查找、插入和删除.
古诗鉴赏.
教育部補助計畫經費動支應行注意事項 報告單位:主 計 室 107年11月6日.
中国农业科学院博士后学术论坛 博士后基金申请的经验及体会 中国农业科学院生物技术研究所 秦 华 博士
2015年雪佛兰经销商7-8月夏季市场活动激励政策 执行手册及模板
Chapter 2 Entity-Relationship Model
實習學生:陳姵儒 指導教授:潘明全 實習單位:戴正彥升大學中心
8的乘法口诀 导入 新授 练习.
Presentation transcript:

第十章 C高级程序应用—链表* 10.1链表的基本概念 10.2单向链表 10.3双向链表 10.4应用举例

10.1 链表的基本概念 链表是具有相同数据类型的对象的有序集合。其对象的类型为结构类型,链表中的对象一般称为“结点”。每个结点在内存中的存放位置是随机的。可以是连续的,也可以是不连续的,每一个结点对象通过其链指针成员和集合中的另一个结点关联。由此,好像一个“链”一样将整个链表集合中的所有结点对象连起来,所以称为“链表”。链表的实现涉及到动态内存分配和引用自身的结构类型。 10.1.1 动态内存分配函数: 动态内存分配是指在程序运行过程中,根据需要而分配内存空间的方式。在C系统的函数库中提供了动态分配和释放内存空间的函数,详见教材P269 例10.1

10.1 链表的基本概念 10.1.2 用于动态内存分配的操作符 —new和delete操作符: 在C++编译系统中则使用C++内置的操作符new和delete来动态分配和释放内存空间。当我们使用操作符new在内存中动态申请一片存储空间时,它实际上做了两件事:获得一块内存空间和返回该片内存空间的首地址。new和delete操作符是配对使用的。详见教材P271 例10.2

10.1 链表的基本概念 10.1.3 引用自身的结构类型: 引用自身的结构类型 是一种特殊的结构类型,即该结构类型的成员中包含有指向该结构类型自身的指针成员。 struct TeacherNode { Datatype data; // 数据成员 TeacherNode *next; // 指向结构类型自身的指针 }; 该结构中定义了两个成员,第一个是数据成员data;其类型为Datatype(Datatype可以是C支持的任何数据类型),用来存放一个TeacherNode结构类型的对象的基本信息;第二个是指针成员next,这是指向TeacherNode自身的指针。

10.1 链表的基本概念 10.1.3 引用自身的结构类型(续): 引用自身的结构类型 是一种特殊的结构类型,即该结构类型的成员中包含有指向该结构类型自身的指针成员。 struct TeacherNode { Datatype data; // 数据成员 TeacherNode *next; // 指向结构类型自身的指针 }; 由于每一个该类型的结构变量都可以通过其next成员找到另一个该类型的结构变量,因此,使用引用自身的结构类型,可以将存放在内存中随机位置的结构变量从逻辑上链接起来,在逻辑上形成一个有序的集合——链表。通常把next成员称为链指针。

10.2 单向链表 单向链表 是由称为结点的对象构成的。每个结点,除需要存储数据值外还需要存储一个直接指向相应后继结点存放位置的指针信息(即后继结点的内存存储地址)。所以,结点是含有数据成员和链指针成员的结构类型。链指针用来指向后继结点(即存放指向结点的地址)。 10.2.1 单向链表的建立: 由于访问单向链表中的任一结点都必须是从链表的头开始,所以,我们设置一个专门的指针变量用来指向链表的开头,这个专门的指针变量称为表头指针(head)。 实际中,为了操作方便,链表一般都会设一个头结点,将表头指针head指向这个头结点。头结点的的数据域是没有用处的。头结点的后继所指向的结点才是链表的第一个结点。 图10-2-1 单向链表结构 头结点 head 空表 NULL 指针 数据 例10.3

10.2 单向链表 10.2.2 单向链表中结点的遍历: void browseTeacherList(TeacherList teacherList) { ……  TeacherNode *p = teacherList->next; // 指向当前教师结点的指针 int n = 0; // 教师人数 while(p != NULL) // 循环后移指针,至p指向最后一个教师为止 { writelnTeacher(p->data); // 输出当前教师信息 p = p->next; // 指针后移 n++; } ……

10.2 单向链表 10.2.3 单向链表中结点的插入: TeacherNode *s = NULL; 图10-2-4在单向链表中插入一个结点 (b)插入后 (a)插入前 101101 101103 NULL p q s 101102 head …… TeacherNode *s = NULL; s = new TeacherNode; s->data = xxxx; s->next = q; p->next = s;

10.2 单向链表 10.2.4 单向链表中结点的删除: 图10-2-5 在单向链表中删除一个结点 (a)删除节点前 xxx pre NULL (b)删除节点后 p head …… pre->next = p->next; // 或pre->next=pre->next->next; delete p; // 释放当前结点指针p所指向的空间

10.2 单向链表 10.2.5 由单向链表构成循环链表: 图10-2-6 单向循环链表 data rear 如果将单向链表的最后一个结点的链指针指向单向链表的第一个结点,就构成了一个单向循环链表,如图10-2-6所示 从循环链表中任意给定结点出发,都可以访问到循环链表中的其它结点。 在一个循环链表中,通常要定义一个指向尾结点的指针rear(表尾指针)。指针rear的作用类似于单链表中的表头指针head。

10.3 双向链表 双向链表是指链表中的每个结点共有两个指针域:一个是向后进行链接的指针,另一个是向前进行链接的指针。这样,一个结点至少有三个域,即数据域(data)、前指针域(prior)和后指针域(next)。图10-3-1表示了双向链表的结构。 图10-3-1 双向链表 head data NULL end 使用双向链表的主要优点是: ① 能从两个方向对链表进行操作。不仅简化了排序,而且使用户能从两个方向检索链表。 ② 由于可以从正向或反向读链表。当其中一个链被破坏时,可以使用另一个链重建链表。

10.3 双向链表(续) 双向链表的结点类型: struct TeacherNode { TeacherInfo data; // 数据域 图10-3-1 双向链表 head data NULL end 双向链表的结点类型: struct TeacherNode { TeacherInfo data; // 数据域 TeacherNode *next; // 后继指针 TeacherNode *prior; // 前驱指针 };

10.3 双向链表(续) 在双向链表中,将new指向的新结点插入到双向链表遍历指针p指向结点之后。操作过程如图10-3-2所示 图10-3-2 新结点插入到指定结点前后的示意图 (a)插入结点前 head data NULL end (b)插入结点后 new p new->next = p->next; new->prior = p p->next->prior = new; p->next = new

10.3 双向链表(续) 在双向链表中,删除指针p指向的结点,其操作过程如图10-3-3所示。 p->next->prior = p->prior; p->prior->next = p->next; delete p

10.4 应用举例 例10.5 例10.4