第二章 线性表 第二节 线性链表 5. 线性表的链式表示 顺序表的优点是可以随机选取表中元素 缺点是插入删除操作复杂。 用指针将互不相连的内存结点串成的 线性表叫线性链表。 结点 node 由一个数据元素域,一个或几个 指针域组成。单链表的结点只有一个指针域。

Slides:



Advertisements
Similar presentations
第六章 数组与字符串 §6.1 数组 §6.2 字符串. §6.1 数组 数组的创建 ( 一维数组和二维数组;基本数据类型和 复合数据类型) 1. 指定数组名称、数据类型 type var_name[]; 如: char s[]; Object o[]; int i[][];
Advertisements

首 页 首 页 上一页 下一页 本讲内容 投影法概述三视图形成及其投影规律平面立体三视图、尺寸标注 本讲内容 复习: P25~P31 、 P84~P85 作业: P7, P8, P14[2-32(2) A3 (1:1)]
队列. Queues 队列 队列 (Queues) 是生活中 “ 排队 ” 的抽象。队列 的特点是: – 一些元素的线形序列; – 新加入的元素排在队尾,出队的元素在对头 进行,即插入和删除只能在队的两段进行; – 先来的先得到服务;故称为先进先出表 (FIFO, first in first.
概率统计( ZYH ) 节目录 2.1 随机变量与分布函数 2.2 离散型随机变量的概率分布 2.3 连续型随机变量的概率分布 第二章 随机变量及其分布.
概率统计( ZYH ) 节目录 3.1 二维随机变量的概率分布 3.2 边缘分布 3.4 随机变量的独立性 第三章 随机向量及其分布 3.3 条件分布.
HistCite 结果分析示例 罗昭锋. By:SC 可能原因:文献年度过窄,少有相互引用.
第二章 质点组力学 质点组:许多(有限或无限)相 互联系的质点组成的系统 研究方法: 1. 分离体法 2. 从整体考虑 把质点的三个定理推广到质点组.
JAVA 程式設計與資料結構 第十四章 Linked List. Introduction Linked List 的結構就是將物件排成一列, 有點像是 Array ,但是我們卻無法直接經 由 index 得到其中的物件 在 Linked List 中,每一個點我們稱之為 node ,第一個 node.
第 4 章 抽象解释 内容概述 以一种独立于编程语言的方式,介绍抽象解释的 一些本质概念 – 将 “ 程序分析对语言语义是正确的 ” 这个概念公式 化 – 用 “ 加宽和收缩技术 ” 来获得最小不动点的较好的 近似,并使所需计算步数得到限制 – 用 “ 伽罗瓦连接和伽罗瓦插入 ” 来把代价较大的属 性空间用代价较小的属性空间来代替.
回顾 栈、队列、循环队列的定义、特征和描 述 栈、队列、循环队列的表示方法 栈、队列、循环队列的重要操作 递归的定义、分类及优缺点 递归与栈的关系 简单递归程序的编写.
1 为了更好的揭示随机现象的规律性并 利用数学工具描述其规律, 有必要引入随 机变量来描述随机试验的不同结果 例 电话总机某段时间内接到的电话次数, 可用一个变量 X 来描述 例 检测一件产品可能出现的两个结果, 也可以用一个变量来描述 第五章 随机变量及其分布函数.
计算机文化基础 第 13 章 多表操作. 多表操作 以前所进行的操作中,在同一时刻只能打开一个表文 件,这是单工作区操作。但是在有些情况下,我们需要同时 了解多个表文件中的内容,例如 图 8-1 。在表文件 Stud1.DBF 中,有姓名,班级,电话三项;在 Stud2.DBF 中, 有姓名,性别,籍贯,英语四个字段。在单工作区操作方式.
例9:例9: 第 n-1 行( -1 )倍加到第 n 行上,第( n-2 ) 行( -1 )倍加到第 n-1 行上,以此类推, 直到第 1 行( -1 )倍加到第 2 行上。
第 10 章 数据表的基本操作 计算机文化基础. 第一节 表结构显示与修改 1 、显示表的结构 格式: LIST/DISPLAY STRUCTURE [TO PRINT] 功能:显示(打印)当前已打开的数据库文件结构 说明:首先必须打开库文件。 LIST 是连续显示全部内容; DISPLAY 是分屏显示.
主讲教师:陈殿友 总课时: 124 第八讲 函数的极限. 第一章 机动 目录 上页 下页 返回 结束 § 3 函数的极限 在上一节我们学习数列的极限,数列 {x n } 可看作自变量 为 n 的函数: x n =f(n),n ∈ N +, 所以,数列 {x n } 的极限为 a, 就是 当自变量 n.
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第四十八讲 ) 离散数学. 例 设 S 是一个非空集合, ρ ( s )是 S 的幂集合。 不难证明 :(ρ(S),∩, ∪,ˉ, ,S) 是一个布尔代数。 其中: A∩B 表示 A , B 的交集; A ∪ B 表示 A ,
資料結構實習-一 參數傳遞.
线性代数习题课 吉林大学 术洪亮 第一讲 行 列 式 前面我们已经学习了关 于行列式的概念和一些基本 理论,其主要内容可概括为:
吉林大学远程教育课件 主讲人 : 杨凤杰学 时: 64 ( 第二十五讲 ) 离散数学. 定理 群定义中的条件 ( 1 )和( 2 )可以减弱如下: ( 1 ) ’ G 中有一个元素左壹适合 1 · a=a; ( 2 ) ’ 对于任意 a ,有一个元素左逆 a -1 适 合 a -1 ·
第二章 随机变量及其分布 第一节 随机变量及其分布函数 一、随机变量 用数量来表示试验的基本事件 定义 1 设试验 的基本空间为 , ,如果对试验 的每一个基 本事件 ,规定一个实数记作 与之对应,这样就得到一个定义在基本空 间 上的一个单值实函数 ,称变量 为随机变量. 随机变量常用字母 、 、 等表示.或用.
数 学 系 University of Science and Technology of China DEPARTMENT OF MATHEMATICS 第 3 章 曲线拟合的最小二乘法 给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。 在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。
第六章 文件管理. 程序设计中,文件是十分重要的,许多情况下, 使用文件可以高效地解决实际问题。有用的数据在后 备存储器上以文件的形式存储后,我们就可以通过文 件对数据进行访问、操作以及检索,这称为文件管理。 6.1 文件的分类 根据文件访问类型的不同,可以将文件分为三类: 顺序文件、随机文件和二进制文件。
《 数据结构》课程 中国科学技术大学网络学院 数据结构 第四章字符串. 本章内容 4.1 串的基本概念 4.2 串的存储结构 4.3 串的基本运算的实现 习题 4.
主讲教师:陈殿友 总课时: 124 第十一讲 极限的运算法则. 第一章 二、 极限的四则运算法则 三、 复合函数的极限运算法则 一 、无穷小运算法则 机动 目录 上页 下页 返回 结束 §5 极限运算法则.
在发明中学习 线性代数 概念的引入 李尚志 中国科学技术大学. 随风潜入夜 : 知识的引入 之一、线性方程组的解法 加减消去法  方程的线性组合  原方程组的解是新方程的解 是否有 “ 增根 ” ?  互为线性组合 : 等价变形  初等变换  高斯消去法.
白 雪 飞 中国科学技术大学电子科学与技术系 Dept. of Elec. Sci. & Tech., USTC Fall, 2007 第 8 章 结 构 体.
第五章 关系模型的局限性 一个代表性的多面体的关系描述 关系模型的缺点 阻抗失配带来的问题. 用边界表示法描述的多面体 E-R 设计 Polyeder N Hull M PolyID Faces N Boundaries M FaceID Edges N StartEnd M EdgeID Vertices.
中序轉後序 藉由由左向右掃瞄中序運算式產生後序運算式,遇到 運算元就直接輸出,遇到運算符號則先存入堆疊,將 優先權較高者輸出。 範例: a + b * c TokenStack [0] [1] [2] topoutput aa ++0a b+0ab *+ *1ab c+ *1abc eosabc*+
东南大学计算中心 网站应用与实践 主讲人 吴俊. 2 东南大学计算中心 网站制作流程  确定主题、风格  规划栏目、收集素材  版面设计、配色  编辑页面  测试发布 FrontPage 要完成的任务.
Photoshop CS4 标准培训教程 第三章第三章 在 Photoshop CS4 中所谓的不规则选区指的是随意性强,不被局限在几何形状内, 他们可以是鼠标任意创建的也可以是通过计算而得到的单个选区或多个选区。在 Photoshop 中可以用来创建不规则选区的工具被分组放置到套索工具组、魔棒工具组.
第5章 键盘与鼠标接口 5.1 键盘概述 5.2 键盘的工作原理 5.3 PC扩展键盘接口 5.4 键盘中断与键盘I/O 5.5 鼠标接口.
第五节 学习要点 对句子的分析,向来是从句型、句类、句式的角度进行的。 以这三个角度为切入点,我们可以建立句型系统、句类系统和句 式系统。 ★句型系统 —— 按照句子的结构模式划分出来的类型系统。
第二章 通信技术基础 谈英姿 东南大学自控系工业自动化教研室. 通信技术基础 2.1 通信的基本概念 2.2 通信协议与网络层次分析 2.3 常用串行通信技术.
第 3 章 控制流分析 内容概述 – 定义一个函数式编程语言,变量可以指称函数 – 以 dynamic dispatch problem 为例(作为参数的 函数被调用时,究竟执行的是哪个函数) – 规范该控制流分析问题,定义什么是可接受的控 制流分析 – 定义可接受分析在语义模型上的可靠性 – 讨论分析算法.
 符号表  标识符的作用: 声明部分:定义了各种对象及对应的属性和 使用规则。 程序体:对所定义的对象进行各种操作。 $ididname IdnameAttributeIR  必要性 Token : 新表-符号表(种类、类型等信息):
Department of Mathematics 第二章 解析函数 第一节 解析函数的概念 与 C-R 条件 第二节 初等解析函数 第三节 初等多值函数.
Lesson 4 Data Structure: Stacks, Queues and Linked Lists.
首 页 首 页 上一页 下一页 本讲内容本讲内容 视图,剖视图(Ⅰ) 复习: P107 ~ P115 作业: P48(6-2,6-4), P49( 去 6-6) P50, P51(6-13), P52 P50, P51(6-13), P52 P53 (6-18,6-20) P53 (6-18,6-20)
L.Chen1 Chapter 3 DATA REPRESENTATION(2) L.Chen A Chain Iterator Class A Chain Iterator Class ( 遍历器类 )  An iterator permits.
Copyright © 2011 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy.
《 UML 分析与设计》 交互概述图 授课人:唐一韬. 知 识 图 谱知 识 图 谱知 识 图 谱知 识 图 谱.
Chapter 11 Pointers ( 指针 ) §11.1 Pointer Basics §11.2 Some Special Pointers §11.3 Pointer in Function §11.4 Pointer and String §11.5 “struct” and Linked.
Chapter 8 Algorithms. Understand the concept of an algorithm. Define and use the three constructs for developing algorithms: sequence, decision, and repetition.
XP 信息处理技术 Technology of Information Processing 潘晟旻 Instructor: Pan Shengmin 潘晟旻 Computer Center. Kun Ming University of Science & Technology.
项目七: PLC 功能指令应用 带进位循环左移指令 XXXXX. 项目七: PLC 功能指令应用 FX2 系列可编程控制器移位控制指令有移位、循环移位、字移位 及先进先出 FIFO 指令等 10 条指令。 带进位循环右移指令 RCR 带进位循环左移指令 RCL 字右移位指令 WSFR 先入先出读出指令.
第四章 计算机数控( CNC )系统  本章重点:  1 计算机数控系统构成及其结构特点  2 运动轨迹插补原理  3 刀具补偿.
§10.2 对偶空间 一、对偶空间与对偶基 二、对偶空间的有关结果 三、例题讲析.
C++ Programming: From Problem Analysis to Program Design, Second Edition Chapter 17: Linked Lists.
1 Chapter 16 Linked Structures Dale/Weems. 2 Chapter 16 Topics l Meaning of a Linked List l Meaning of a Dynamic Linked List l Traversal, Insertion and.
1 Chapter 16 Linked Structures Dale/Weems/Headington.
表单自定义 “ 表单自定义 ” 功能是用于制作表单的 工具,用数飞 OA 提供的表单自定义 功能能够快速制作出内容丰富、格 式规范、美观的表单。
A Doubly Linked List prevnextdata There’s the need to access a list in reverse order header dnode.
力的合成 力的合成 一、力的合成 二、力的平行四边形 上一页下一页 目 录 退 出. 一、力的合成 O. O. 1. 合力与分力 我们常常用 一个力来代替几个力。如果这个 力单独作用在物体上的效果与原 来几个力共同作用在物体上的效 果完全一样,那么,这一个力就 叫做那几个力的合力,而那几个 力就是这个力的分力。
河南济源市沁园中学 前进中的沁园中学欢迎您 ! 温故知新: 1 、什么是原子? 2 、原子是怎样构成的? 3 、原子带电吗?为什么?
#include //ECH0.CPP main(int argc,char *argv[]) { for(int i=0;i
小组成员:冯小懋 刘得民 周彬彬 张振 Excel 在投资理财中的应用(第二节) 第二组. 名称框的应用 应用了名称框定义后,会在引用时直接引用定义的名称。 操作:选定要定义名称的位置,选择 “ 插入 ”——“ 名称 ”——“ 指定 ” 本题中选择 “ 最左列 ” ,也可以自己定义,若是定义同一个名称可.
八. 真核生物的转录 ㈠ 特点 ① 转录单元为单顺反子( single cistron ),每 个蛋白质基因都有自身的启动子,从而造成在功能 上相关而又独立的基因之间具有更复杂的调控系统。 ② RNA 聚合酶的高度分工,由 3 种不同的酶催化转 录不同的 RNA 。 ③ 需要基本转录因子与转录调控因子的参与,这.
SEI PowerPoint Presentation for LiuHui, Object-Oriented Programming for C++, 2 nd Edition Copyright 2007 © SEI, All rights reserved Object-Oriented.
人 有 悲 欢 离 合, 月有阴晴圆缺。月有阴晴圆缺。 华师大版七年级数学第二册 海口市第十中学 数学组 吴锐.
Linked List.  Is a series of connected nodes, where each node is a data structure with data and pointer(s) Advantages over array implementation  Can.
1 第三章 数列 数列的概念 考点 搜索 ●数列的概念 ●数列通项公式的求解方法 ●用函数的观点理解数列 高考 猜想 以递推数列、新情境下的 数列为载体, 重点考查数列的通 项及性质, 是近年来高考的热点, 也是考题难点之所在.
栈 栈的应用 栈的应用 队列 队列 优先队列 优先队列 a1a1 a2a2 a3a3 a4a4 a5a5 a6a6 插入 x i 删除 x j 插入 删除 栈 ( Stack )
Linked Lists Data Structures and Algorithms CS 244 Brent M. Dingle, Ph.D. Department of Mathematics, Statistics, and Computer Science University of Wisconsin.
Date: File: SSP1_A1C.1 SIMATIC S7 Siemens AG All rights reserved. Information and Training Center Knowledge for Automation 案例分析、指导.
SME.USTB Human Factors 人机工程学 By Wei Dong Department of Industry Design, SME, USTB.
Session 03 - Templates Outline 03.1Introduction 03.2Function Templates 03.3Overloading Template Functions 03.4Class Templates 03.5Class Templates and Non-type.
A Doubly Linked List There’s the need to access a list in reverse order prev next data dnode header 1.
Chapter 16-2 Linked Structures
Chapter 16 Linked Structures
Chapter 16-3 Linked Structures
Presentation transcript:

第二章 线性表 第二节 线性链表

5. 线性表的链式表示 顺序表的优点是可以随机选取表中元素 缺点是插入删除操作复杂。 用指针将互不相连的内存结点串成的 线性表叫线性链表。 结点 node 由一个数据元素域,一个或几个 指针域组成。单链表的结点只有一个指针域。

几个结点,前一个结点的指针, 指向后一个结点,就连接成一个 线性链表。 线性链表的优点则是插入,删除 快捷,缺点是选取复杂。

6. 结点类的定义 #include <stdlib.h 〉 #include template class Node { Node *next; //next 是下一个结点的地址 public: T data; // the data is public Node (const T& item, Node * ptrnext = NULL); // list modification methods void InsertAfter(Node *p); Node *DeleteAfter(void); // obtain the address of the next node Node *NextNode(void) const; };

// constructor. initialize data and // pointer members template Node ::Node(const T& item, Node * ptrnext) : data(item), next(ptrnext) ) { }

// return value of private member next template Node * Node ::NextNode(void) const { return next; }

// insert a node p after the current one template void Node ::InsertAfter(Node *p) { // p points to successor of the current // node, and current node points to p. p->next = next; next = p; }

// delete the node following current and return its address template Node * Node ::DeleteAfter(void) { // save address of node to be deleted Node * tempPtr = next; // if there isn't a successor, return NULL if (next == NULL) return NULL; // current node points to successor of tempPtr. next = tempPtr->next; // return the pointer to the unlinked node return tempPtr; }

2 .人工建立一个链表 void main(void) { Node *a,*b,*c; a=new Node ('a'); b=new Node ('b'); c=new Node ('c'); Node *head,*p; head=new Node (' '); p=head; head->InsertAfter(a); head->InsertAfter(b); head->InsertAfter(c); while(p!=NULL) { cout data<<" "; p=p->NextNode( ); } }  测试结果:打印 c b a

3. 定义线性链表的一些操作 #include "node.h" // allocate a node with data member item and pointer nextPtr template Node *GetNode(const T& item, Node *nextPtr = NULL) { Node *newNode; // allocate memory while passing item and NextPtr to // constructor. terminate program if allocation fails newNode = new Node (item, nextPtr); if (newNode == NULL) { cerr << "Memory allocation failure!" << endl; exit(1); } return newNode; }

enum AppendNewline {noNewline,addNewline}; template // print a linked list void PrintList(Node *head, AppendNewline addnl = noNewline) { // currPtr chains through the list, starting at head Node *currPtr = head; // print the current node's data until end of list while(currPtr != NULL) { // output newline if addl == addNewline if(addnl == addNewline) cout data << endl; else cout data << " "; // move to next node currPtr = currPtr->NextNode( ); } }

// find an item in a linked list head; return TRUE and // value of previous pointer if found; otherwise return FALSE template int Find(Node *head, T& item, Node * &prevPtr) { Node *currPtr = head; // begin traversal at first node prevPtr = NULL; // cycle through the list until end of list while(currPtr != NULL) { if (currPtr->data == item) {item = currPtr->data;return 1;} prevPtr = currPtr; currPtr = currPtr->NextNode( );} return 0; // failed to locate item }

// insert item at the front of list template void InsertFront(Node * & head, T item) { // allocate new node so it points to original list head // update the list head head = GetNode(item,head); }

// find rear of the list and append item template void InsertRear(Node * & head, const T& item) { Node *newNode, *currPtr = head; if (currPtr == NULL) // if list is empty, insert item at the front InsertFront(head,item); else { // find the node whose pointer is NULL while(currPtr->NextNode( ) != NULL) currPtr = currPtr->NextNode( ); // allocate node and insert at rear (after currPtr) newNode = GetNode(item); currPtr->InsertAfter(newNode); }

// delete the first node of the list template void DeleteFront(Node * & head) { // save the address of node to be deleted Node *p = head; // make sure list is not empty if (head != NULL) { // move head to second node and delete original head = head->NextNode( ); delete p; }

// delete the first occurrence of key in the list template void Delete (Node * & head, T key) { Node *currPtr = head, *prevPtr = NULL; if (currPtr == NULL) return; while (currPtr != NULL && currPtr->data != key) { prevPtr = currPtr; currPtr = currPtr->NextNode( ); } if (currPtr != NULL) { if(prevPtr == NULL) head = head->NextNode(); else prevPtr->DeleteAfter(); delete currPtr; } }

// insert item into the ordered list template void InsertOrder(Node * & head, T item) { Node *currPtr, *prevPtr, *newNode; prevPtr = NULL; currPtr = head; while (currPtr != NULL) { if (item data) break; prevPtr = currPtr; currPtr = currPtr->NextNode( ); } if (prevPtr == NULL) InsertFront(head,item); else { newNode = GetNode(item); prevPtr->InsertAfter(newNode); } }

// delete all the nodes in the linked list template void ClearList(Node * &head) { Node *currPtr, *nextPtr; currPtr = head; while(currPtr != NULL) { nextPtr = currPtr->NextNode(); delete currPtr; currPtr = nextPtr; } head = NULL; }

// insert item into the ordered list template void InsertOrder(Node * & head, T item) { Node *currPtr, *prevPtr, *newNode; prevPtr = NULL; currPtr = head; while (currPtr != NULL) { if (item data) break; prevPtr = currPtr; currPtr = currPtr->NextNode( ); } if (prevPtr == NULL) InsertFront(head,item); else { newNode = GetNode(item); prevPtr->InsertAfter(newNode); } }

链表插入排序 #include #pragma hdrstop #include "node.h" #include "nodelib.h"

template void LinkSort(T a[], int n) { Node *ordlist = NULL, *currPtr; int i; for (i=0;i < n;i++) InsertOrder(ordlist, a[i]); currPtr = ordlist; i = 0; while(currPtr != NULL) { a[i++] = currPtr->data; currPtr = currPtr->NextNode( ); } ClearList(ordlist); }

// scan the array and print its elements void PrintArray(int a[], int n) { for(int i=0;i < n;i++) cout << a[i] << " "; }

/*void main(void) { // initialized array with 10 integer values int A[10] = {82,65,74,95,60,28,5,3,33,55}; LinkSort(A,10); // sort the array cout << "Sorted array: "; PrintArray(A,10); // print the array cout << endl; } */ #endif // NODE_LIBRARY