山东大学数据结构课件

合集下载

《数据结构》课件

《数据结构》课件

查找操作
顺序查找
二分查找
链表查找
在顺序存储结构的线性表中,查找操 作需要从线性表的第一个节点开始, 逐个比较节点的数据域,直到找到目 标数据或遍历完整个线性表。时间复 杂度为O(n)。
在有序的顺序存储结构的线性表中, 查找操作可以采用二分查找算法。每 次比较目标数据与中间节点的数据域 ,如果目标数据大于中间节点,则在 右半部分继续查找;否则在左半部分 查找。时间复杂度为O(log n)。
数据结构是算法的基础。许多算法的实现需要依赖于特定的数据结构, 因此掌握常见的数据结构是编写高效算法的关键。
数据结构在解决实际问题中具有广泛应用。无论是操作系统、数据库系 统、网络通信还是人工智能等领域,数据结构都发挥着重要的作用。
数据结构的分类
根据数据的逻辑关系,数据结构可以分为线性结构和非线 性结构。线性结构如数组、链表、栈和队列等,非线性结 构如树形结构和图形结构等。
04
数据结构操作
插入操作
顺序插入
在顺序存储结构的线性表中,插入操作 需要找到插入位置的前驱节点,修改前 驱节点的指针,使其指向新节点,然后 让新节点指向后继节点。如果线性表的 第一个节点是空节点,则将新节点作为 第一个节点。
VS
链式插入
在链式存储结构的线性表中,插入操作需 要找到插入位置的前驱节点,修改前驱节 点的指针,使其指向新节点。如果线性表 的第一个节点是空节点,则将新节点作为 第一个节点。

01
02
03
04
图是一种非线性数据结构,由 节点和边组成,其中节点表示 数据元素,边表示节点之间的
关系。
图具有网络结构,节点之间的 关系可以是任意复杂的,包括
双向、单向、无向等。

山大计算机数据结构ppt电子版资料C 概述综述

山大计算机数据结构ppt电子版资料C  概述综述

一、基础知识
(2)指针运算
对象指针可与整型数进行加减运算 指针将向前或向后移动整数值个单位 每个单位的长度等于所指数据对象的长度
(3)指向函数的指针
函数指针可理解为地址,该函数的代码从此地址开始存放 Int strcomp(char*,char*); Int (*ptr)(char*,char*); Ptr=strcmp; 区别:int *ptr(char*,char*);含义为函数ptr,其返回值为整 数型指针
2019年4月4日9时56分 山东大学计算机学院 19
一、基础知识
(5)跳转语句
Break
用于for,while,do-while或switch语句的循环体中 用来终止循环或swith语句的执行
Continue
出现在循环体中,使循环马上停止执行后面的语句,转 而执行下一次条件测试
Goto语句 Return语句
(2)参数传递
传值法,传址法 传址时,参数为指针,直接使用变量名;否则用&取址
2019年4月4日9时56分
山东大学计算机学院
21
一、基础知识
(3)函数缺省参数
须在函数原型定义时指定参数的初值 Int max(int i=0,int j=0); 缺省参数必须放在参数序列的最右边
(4)Inline函数
常量
定义变量时加上const限定符
const int j=100;
定义常量时,如缺省数据类型则为整数型 定义常量时,必须同时给定初值 支持用#define宏来定义常数变量,但这 种定义没有数据类型,而const定义的变 量均有数据类型
2019年4月4日9时56分 山东大学计算机学院 7
一、基础知识
2019年4月4日9时56分 山东大学计算机学院 14

全套电子课件:数据结构(C语言版)(第三版)

全套电子课件:数据结构(C语言版)(第三版)

例 计算f=1!+2!+3!+…+n!, 用C语言描述。
void factorsum(n) int n;{int i,j;int f,w; f=0; for (i=1,i〈=n;i++) {w=1; for (j=1,j〈=i;j++) w=w*j; f=f+w;} return;
1.2 数据结构的发展简史及其 在计算机科学中所处的地位
• 发展史: 1、 “数据结构”作为一门独立的课程在国外是从1968年才开始设
立的。 2、 1968年美国唐·欧·克努特教授开创了数据结构的最初体系,他所
著的《计算机程序设计技巧》第一卷《基本算法》是第一本较 系统地阐述数据的逻辑结构和存储结构及其操作的著作。
⑵ while语句
while (〈条件表达式〉) { 循环体语句; }
• while循环首先计算条件表达式的值,若条件表达式的值非零, 则执行循环体语句,然后再次计算条件表达式,重复执行,直 到条件表达式的值为假时退出循环,执行该循环之后的语句。
⑶ do-while语句
do { 循环体语句 } while(〈条件表达式〉)
• 地位: 1、“数据结构”在计算机科学中是一门综合性的专业基础课。
2、数据结构是介于数学、计算机硬件和计算机软件三者之间 的一门核心课程。
3、数据结构这一门课的内容不仅是一般程序设计(特别是非 数值性程序设计)的基础,而且是设计和实
1.3 什么是数据结构
• 解决非数值问题的算法叫做非数值算法,数据处理方面的算法都 属于非数值算法。例如各种排序算法、查找算法、插入算法、删 除算法、遍历算法等。
• 数值算法和非数值算法并没有严格的区别。

数据结构ppt课件完整版

数据结构ppt课件完整版

针对有序数据集合,每次通过中间元素将 待查找区间缩小为之前的一半,直到找到 元素或区间为空。
哈希查找
树形查找
通过哈希函数将数据映射到哈希表中,实 现快速查找。
如二叉搜索树、平衡树等,通过树形结构实 现高效查找。
排序算法分类及实现原理
插入排序
将待排序元素逐个插入到已排序序列中,直到所有元素均插入完毕。
由n(n>=0)个具有相同类型 的数据元素(结点)a1,a2,
...,an组成的有序序列。
同一性
每个元素必须是同一类型的数 据。
有序性
元素之间具有一对一的前驱和 后继关系,即除首尾元素外, 每个元素都有一个前驱和一个 后继。
可变性
线性表的长度可变,即可以插 入或删除元素。
顺序存储结构与链式存储结构比较
定义
用一段连续的存储单元依次存储线性 表的数据元素。
优点
可以随机存取表中任一元素,且存取 时间复杂度为O(1)。
顺序存储结构与链式存储结构比较
• 缺点:插入和删除操作需要移动大量元素,时间 复杂度高;需要预先分配存储空间,容易造成空 间浪费。
顺序存储结构与链式存储结构比较
定义
用一组任意的存储单元存储线性 表的数据元素(这组存储单元可 以是连续的,也可以是不连续的
查找操作
查找指定元素的位置。
遍历操作
访问线性表中的每个元素。
销毁操作
释放线性表占用的存储空间。
03
栈和队列
栈定义及特点
栈(Stack)是一种特殊的线性数据结构,其数据的存 取遵循后进先出(LIFO, Last In First Out)的原则。 栈的特点
具有记忆功能,能保存数据的状态。
栈的基本操作包括入栈(push)、出栈(pop)、查 看栈顶元素(top)等。 只能在栈顶进行数据的插入和删除操作。

001C++程序设计 数据结构

001C++程序设计 数据结构
1/1/2014 5
堆的概念
当程序运行到需要一个动态分配的变量或对象时,
必须向系统申请取得堆中的一块所需大小的存贮空 间,用于存贮该变量或对象。
当不再使用该变量或对象时,也就是它的生命结束
时,要显式释放它所占用的存贮空间,这样系统就 能对该堆空间进行再次分配,做到重复使用有限的 资源。
1/1/2014 6
山东大学计算机科学与技术学院 数据结构 第1章 C++程序设计 20
1.3.5 二维数组
程序 1-13 创建一个二维数组但不处理异常 . template <class T> Void Make2DArray ( T** &x, int rows, int cols) {//创建一个二维数组 //不捕获异常. x = new T*[rows]; //创建行指针
第1章 C++程序设计
山东大学计算机科学与技术学院
数据结构
第1章 C++程序设计
1
本章内容:
C++特性:





参数传递方式(如传值、引用和常量引用)。 函数返回方式(如返值、引用和常量引用)。 模板函数。 递归函数。 常量函数。 内存分配和释放函数:new与delete。 异常处理结构:try,catch和throw。 类与模板类。 类的共享成员、保护成员和私有成员。 友元。 操作符重载。
Delete:
释放由操作符new所分配的空间
int *y = new int (10); Delete y; float *x=new float[n]; Delete []x;
山东大学计算机科学与技术学院

山大数据结构_5精讲

山大数据结构_5精讲

27
方法

可以在从左至右的扫描过程中把所遇到 的左括号存放到堆栈内。每当遇到一个 右括号时,就将它与栈顶的左括号(如 果存在)相匹配,同时从栈顶删除该左 括号。
1/31/2019
28
汉诺塔问题

已知 n 个碟子和 3 座塔。初始时所有的 碟子按从大到小次序从塔1的底部堆放 至顶部,需要把碟子都移动到塔2,每 次移动一个碟子,而且任何时候都不 能把大碟子放到小碟子的上面。
1/31/2019
13
链表描述
哪一端对应栈顶?
1/31/2019
14
从Chain派生的链表形式的堆栈
template<class T> class LinkedStack : private Chain<T> { public: bool IsEmpty() const {return Chain<T>::IsEmpty();} bool IsFull() const; T Top() const {if (IsEmpty()) throw OutOfBounds(); T x; Find(1, x); return x;} LinkedStack<T>& Add(const T& x) {Insert(0, x); return *this;} LinkedStack<T>& Delete(T& x) {Chain<T>::Delete(1, x); return *this;} 1/31/2019 } ;
自定义Stack
template<class T> class Stack{ // LIFO 对象 public: Stack(int MaxStackSize = 10); ~Stack () {delete [] stack;} bool IsEmpty() const {return top == -1;} bool IsFull() const {return top == MaxTo p ; } T Top() const; Stack<T>& Add(const T& x); Stack<T>& Delete(T& x); private : int top; // 栈顶 int MaxTop; // 最大的栈顶值 T *stack; // 堆栈元素数组 1/31/2019 9 } ;

山东大学数据结构_6教材

山东大学数据结构_6教材

2
队列(Queues)
1. 定义 是一个线性表,其插入和删 除操作分别在表的不同端进行。 添加新元素的那一端被称为队尾 (rear),而删除元素的那一端被 称为队首(front)。
2. 队 列 是 一 个 先 进 先 出 ( firstin-first-out, FIFO ) 的 线 性 表 。
7/15/2020
7/15/2020
22
公式化类Queue
template<class T> T Queue<T>::Last() const { //返回队列的最后一个元素
//如果队列为空,则引发异常OutOfBounds if (IsEmpty()) throw OutOfBounds(); return queue[rear]; }
7/15/2020
23
公式化类Queue
template<class T>
Queue<T>& Queue<T>::Add(const T& x)
{ //把x 添加到队列的尾部
//如果队列满,则引发异常NoMem
if (IsFull()) throw NoMem();
rear = (rear + 1) % MaxSize;
3
队列 ( Queue )
定义
队列是只允许在一端删除,在另一端插入的 顺序表
允许删除的一端叫做队首(front),允许插入 的一端叫做队尾(rear)。
特性
先进先出(FIFO, First In First Out)
7/15/2020
4
队列
7/15/2020
5
队列

山大 数据结构_2

山大  数据结构_2
1
5/19/2014
本章重点
1. 2.
3.
顺序搜索/折半搜索算法 名次排序/选择排序/冒泡排序/插入 排序算法 渐进符号(O、Θ 、Ω 、o)
5/19/2014
2
算法的性能标准
正确性 可使用性
可读性
健壮性
文档
效率:对空间和时间的需求
5/19/2014
3
2.1 Program Performance
5/19/2014 26
多项式求值
Pn (x) c0 c1 x c2 x cn x
2 n
ci x
i 0
n
i
5/19/2014
27
程序2-3多项式求值算法
template <class T> T PolyEval(T coeff[], int n, const T& x) { / /计算n次多项式的值,coeff[0:n]为多项式的系数 T y=1, value= coeff[0] ; for ( int i = 1; i <= n; i++) { //累加下一项 y *= x;
1.
2. 3. 4.
程序性能:运行一个程序所需要的内 存和时间。 为什么关心程序性能? 分析(Analysis)/实验(measurement) 空间复杂性(Space Complexity)/时 间复杂性(Time Complexity)
4
5/19/2014
2.2 Space Complexity
11
5/19/2014
空间复杂性度量
可以把一个程序所需要的空间分成两部分: 固定部分,独立于实例的特征。一般来说, 这一部分包含指令空间(即代码空间)、 简单变量及定长复合变量所占用空间、常 量所占用空间等等。 可变部分,由以下部分构成:复合变量所 需的空间(这些变量的大小依赖于所解决 的具体问题),动态分配的空间(这种空 间一般都依赖于实例的特征),以及递归 栈所需的空间(该空间也依赖于实例的特 征)。

数据结构课程讲义ppt课件

数据结构课程讲义ppt课件

...
...
... 数据集
控制区域
控制区

46
2. 控制区间是用户进行一次存取的 逻辑单位,可看成是一个逻辑磁道。 但它的实际大小和物理磁道无关。
控制区域由若干控制区间和它们
的索引项组成,可看成是一个逻辑柱面。
VSAM文件初建时,每个控制区 间内的记录数不足额定数,并且有的 控制区间内的记录数为零。
23
假设对外存进行一次读/取为s个 记录,则整个批处理过程中读/写外存 的次数为2(m/s+(m+n)/s)
(其中s为对外存进行一次读/取的 记录数)。
24
10.4 索 引 文 件
一、结构特点:
1.索引文件由“主文件”和多级“索引”组成; 2.索引中的每个记录由“关键字”和“指针”组成; 3.通常,索引文件中的主文件是无序文件,索引是 (按关键字有序)的有序文件; 4.“索引”是在输入数据建立文件时自动生成。初 建时的“静态索引”为无序文件,经过排序后成为有序
12
五、文件的操作:
1.检索
顺序存取:存取“当前记录的” 下一个记录; 直接存取:存取第i个记录; 按关键字存取:存取其关键字 等于给定值的记录。
13
2.修改 往文件中插入一个或一批记录; 从文件中删除一个或一批记录; 更新文件中某个记录的属性。
14
3.排序 文件的操作方式可以实时处理或 批量处理。
2.操作的特点:
检索
插入
删除
39
检索:
可有两种方式:
顺序存取— 依关键字最小至大顺序 存取。
按关键字存取— 从主索引开始,到 柱面索引,到磁道索引,最后取 得记录,先后访问四次外存。
40
插入:

程序设计与数据结构

程序设计与数据结构

• VSAM中插入操作 (1)调用B+树的查找算法,确定该记录应插 入的顺序集结点,进而确定该记录应插入的控 制区间及相应位置。 (2)如果该控制区间中自由空间足以容纳该 记录,则将要插入位置右面的记录右移腾出空 间插入该记录,并在相应位置建立控制信息。 (3)如果自由空间不够,则检查该控制区间 所在的控制域中是否还有空闲的控制区间,若 有,则将控制区间分裂,将其中的近似一半的 记录移动到一个空闲的控制区间中。如无,则 进行一次控制域的分裂。


查找


稀疏索引:每一组 数据记录仅有一索 引项
稠密索引:每个数据记 录,在索引表里都有一 个索引项
• 二级索引、多级索引
2018/11/15 山东大学管理学院 戚桂杰 姚云鸿 12
§ 5 索引顺序文件
一、ISAM


专为磁盘存取设计的文件组织方式,是一种静态索引结构。
ISAM采用多级索引:主索引、柱面索引、磁道索引。
2018/11/15 山东大学管理学院 戚桂杰 姚云鸿 6
§ 3 直接文件(散列文件)
直接文件:记录在介质上的位置是通过对记录的键施加变 换而获得相应地址。 一、桶散列 (静态散列) 基本思想:
把文件的记录通过散列函数H分别存储在许多存储桶中,每个存 储桶包含一个或多个物理块,一个存储桶中的物理块用指针连 接形成链表,每个物理块存放若干记录。如果一个桶溢出,即 它容纳不下所有属于它的记录,那么可以给该存储桶增加一个 溢出块链表以存放更多的记录。
个数增加一倍,即2i+1。在新存储桶目录表中,序 号为k〞0和k〞1(分别用0和1扩展k〞)的项都指 向原k〞目录项指向的物理块。
2018/11/15 山东大学管理学院 戚桂杰 姚云鸿 9

山大计算机数据结构电子版资料C概述PPT课件

山大计算机数据结构电子版资料C概述PPT课件
静态变量也属于局部变量,编译器使用固定地址 存放静态变量,而不是使用堆栈,所以静态变量 所用内存不会随函数的退出而被覆盖
4)寄存器变量(register)
寄存器变量存放于处理器的寄存器中,可以加快 程序的执行速度,用于那些使用十分频繁的变量 程序中不可大量使用寄存器变量
2020/7/27
山东大学计算机学院
(5)typedef
typedef 数据类型 标识符; typedef struct mystruct ps;
2020/7/27
山东大学计算机学院
15
一、基础知识
6.指针
(1)指针定义
数据类型* 指针变量; 指针也是一种变量,其内容是其所指对象的地址 指针定义时不要求初始化,但必须在使用之前进 行赋值 i=5,*ptr; Ptr=&5; 两大类:指向对象的指针,指向函数的指针
C++概述
第一部分
整体概述
THE FIRST PART OF THE OVERALL OVERVIEW, PLEASE SUMMARIZE THE CONTENT
一、基础知识
1.C++的函数特征
C++程序可有多个文件组成,这些文件分为 两类:头文件(.h)和源程序文件(.cpp)
头文件用于存放函数的返回类型、参数类型、 参数个数,成为函数原型。
主程序和.cpp文件通过“#include”定位到头 文件,实现对原型的访问性
函数和数据定义放在.cpp源程序文件中
注释://,/*…*/
2020/7/27
山东大学计算机学院
3
一、基础知识
2.输入输出
C++中执行I/O操作,需#include 一个 <iostream.h>头文件,用以支持流操作 预定义类istream和ostream定义了输入流和输出流 C++提供了一套面向对象的流输入输出方法,其相 应操作符为cin和cout,与>>、<<一起完成c++的 输入输出操作

山东大学数据结构_7

山东大学数据结构_7

Search
template<class E, class K> bool SortedChain<E,K>::Search(const K& k, E& e) const {// 搜索与k匹配的元素,结果放入e // 如果没有匹配的元素,则返回false SortedChainNode<E,K> *p = first; // 搜索与k相匹配的元素 for (; p && p->data < k;p = p->link); // 验证是否与k匹配 if (p && p->data == k) // 与k相匹配 {e = p->data; return true;} return false; // 不存在相匹配的元素 }
11/28/2017
18
定义

当且仅当一个元素在0~i 级链上,但不 在i+1级(若该链存在)链上时,称该元 素是i 级链元素。

40是2级链上唯一的元素,24、75是1级 链元素。20、30、60、80是0级链元素。
19
11/28/2017
跳表Skip List


可以通过对有序链表上的全部或部 分节点增加额外的指针,来提高搜 索性能。 增加了向前指针的链表叫作跳表。
15
11/28/2017
方案展示

例:查找24,查找75?
11/28/2017
16
进一步提高性能
Biblioteka 例:查找30,查找77? 3级链结构实现了有序链表中的折半搜 索。
11/28/2017
17
分析

通常0级链包括n个元素,1级链包 括n/2个元素,2级链包括n/4个元 素,i级链包括 n/2i 个元素。

数据结构课件PPT

数据结构课件PPT

二分查找
二分查找法
将有序数据集分成两个部分,每次取中间位置的值与目标值进行比较,根据比 较结果缩小查找范围,直到找到目标值或确定目标值不存在。
优缺点
查找速度快,但要求数据集必须是有序的。
哈希查找
哈希表
利用哈希函数将数据元素映射到内存中的地址,实现数据的 快速查找。
优缺点
查找速度快,但需要解决哈希冲突问题,并可能存在哈希表 过大或过小的问题。

数据结构的基本概念
数据结构的基本概念包括:数据、数据 元素、数据类型、数据结构等。
数据结构是指数据的组织形式,即数据 元素之间的相互关系。
数据类型是指一组具有相同特征和操作 的数据对象(如整数、实数、字符串等 )。
数据是信息的载体,是描述客观事物的 符号记录。
数据元素是数据的基本单位,一个数据 元素可以由若干个数据项组成。
稳定排序
归并排序是一种稳定的排序算法,即相等的元素在排序后 保持其原有的顺序。
非递归算法
归并排序是一种非递归算法,即通过迭代方式实现算法过 程。
需要额外的空间
归并排序需要额外的空间来存储中间结果和临时变量。
查找算法
06
线性查找
顺序查找
逐一比对数据元素,直到找到目 标值或遍历完整个数据集。
优缺点
简单易懂,但效率较低,适用于 数据量较小的情况。
拓扑排序的应用
拓扑排序是一种对有向无环图进行排序的算法, 它按照拓扑关系将图的节点排列成一个线性序列 。
有向无环图是一种没有环路的有向图,拓扑排序 可以有效地解决有向无环图的排序问题。
拓扑排序的应用非常广泛,包括确定任务的执行 顺序、确定事件的发生顺序等。
拓扑排序的基本思路是从有向无环图的任一节点 开始,删除该节点,并记录下该节点的所有后继 节点的编号,然后按编号从小到大的顺序重复以 上步骤。

山大计算机数据结构ppt电子版资料DS01

山大计算机数据结构ppt电子版资料DS01

2013-8-15
15
数据结构的抽象层次
2013-8-15
16
线性聚集类中各数据成员之间的线性关系
树形结构
2013-8-15

二叉树
二叉搜索树
17
堆结构
“最大”堆
2013-8-15
“最小”堆
18
群聚类
图结构
2013-8-15
网络结构
19
算法定义 定义:一个有穷的指令集,这些指令为 解决某一特定任务规定了一个运算序列 特性: 输入 有0个或多个输入 输出 有一个或多个输出(处理结果) 确定性 每步定义都是确切、无歧义的 有穷性 算法应在执行有穷步后结束 有效性 每一条运算应足够基本
数据结构
DATASTRUCTURE
—— C++描述
2013-8-15
1
第一章 绪论
什么是数据结构 抽象数据类型及面向对象概念 数据结构的抽象层次 用C++描述面向对象程序 算法定义 模板 性能分析与度量
2013-8-15 2
“学生”表格
学 号 98131 98164 98165 98182 98203 98224 98236 98297 98310 98318
由用户定义,用以表示应用问题的数据 模型
由基本的数据类型组成, 并包括一组相 关的服务(或称操作)
信息隐蔽和数据封装,使用与实现相分 离
2013-8-15
10
自然数的抽象数据类型定义
ADT NaturalNumber is objects: 一个整数的有序子集合,它开始于0, 结束于机器能表示的最大整数(MaxInt)。 Function: 对于所有的 x, y NaturalNumber; False, True Boolean, +、-、<、==、=等都是可 用的服务。

数据结构与算法___山东大学课程中心30

数据结构与算法___山东大学课程中心30
Chapter16 回溯
复杂问题解法的提示 16.1 回溯算法的思想 16.2 回溯算法的应用
货箱装船 旅行商问题(TSP问题)
2019/12/1
1
1、寻求问题解的常规思路
首先列出所有候选解 然后依次检查每一个解,直到找到所需的解 【可行性前提】:候选解数量有限,并且能够通过检查
2019/12/1
21
3、回溯算法的应用
货箱装船问题:子集树 旅行商问题:排列树
2019/12/1
22
(1)货箱装船问题
• 有两艘船,n个货箱。第一艘船的载重量是c1 ,第二艘船的载重 量是c2,Wi是货箱i 的重量且 寻求一种将n个货箱全部装船的方法
n
• 例如i1:Wi当nC=13,C2c1 =c2 = 50,w=[10,40,40];可将货箱1 , 2装到第一
• E-节点(Expansion Node)及回溯
– 从E节点可移动到一个新的节点;
– 如果能从当前节点移动到一个新的节点,则这个新节 点将变成一个活节点和新的E-节点;旧的E-节点仍然是 个活节点。
– 如果不能够移到一个新节点,则该E-节点成为死节点, 只能返回到最近被考察的活节点(回溯),这个活节 点变成新的E-节点。
• Page499:程序16-2
寻找最优子集
• Page500:程序16-3 • 引入bestx,记录当前找到的最优货箱子集 • 时间复杂度:O(n2n) • 降低复杂度的两种方法:Page501
2019/12/1
29
(2)旅行商问题
• 解空间是排列树 • 可采用Page8的Perm函数,产
生n个元素表的所有排列
• 2、组织解空间:
– 用树的形式给出。 – 第i层到第i+1层节点的一条边上的数字:向量x中第i个
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

题 2.11
返回
题 2.21
void SqReverse(SqList &va) {//顺序表就地逆置 i=0;j=va.length-1; while(i<j){ t=va.elem[i]; va.elem[i]= va.elem[j]; va.elem[j]=t; i++; j--;} }
返回
题 2.21
void SqReverse(SqList &va) {//顺序表就地逆置 i=0;end=(va.length-1)/2;n=va.length; while(i<=end){ t=va.elem[i]; va.elem[i]= va.elem[n-i-1]; va.elem[n-i-1]=t; i++;} }
题 2.11
返回
Status Insert_Sq( SqList &va, ElemType x ) { // 已知顺序表 va 中元素递增有序,将x插入到 适当位置,并保持原表的有序性 if (va.length = va.listsize){ newbase=(ElemType *)realloc(va.elem, (va.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase) exit(OVERFLOW); va.elem=newbase;va.listsize+=LISTINCREMENT; } i = va.length-1; while (i>=0 && x<va.elem[i]){ va.elem[i+1] = va.elem[i]; // 右移所有值>x的元素 i--;} va.elem[i+1] = x; va.length++; return OK; } //Insert_Sq
例题:
3、下面关于线性表的叙述中,错误的是 A)线性表采用顺序存储,必须占用一片连续的存储单元。 B)线性表采用顺序存储,便于进行插入和删除操作。 C)线性表采用链接存储,不必占用一片连续的存储单元 D)线性表采用链接存储,便于插入和删除操作。 4、下述哪一条是顺序存储方式的优点? A)存储密度大 B)插入运算方便 C)删除运算方便
Status Insert_Sq( SqList &va, ElemType x ) { // 已知顺序表 va 中元素递增有序,将x插入到 适当位置,并保持原表的有序性 if (va.length = va.listsize){ newbase=(ElemType *)realloc(va.elem, (va.listsize+LISTINCREMENT)*sizeof(ElemType)); if(!newbase) exit(OVERFLOW); va.elem=newbase;va.listsize+=LISTINCREMENT; } i = 0; while (i<va.length && x>=va.elem[i]) i++; for ( j=va.length-1; j>=i; j-- ) va.elem[j+1] = va.elem[j]; // 右移所有值>x的元素 va.elem[i] = x; va.length++; return OK; } //Insert_Sq
6、单链表的每个结点中包括一个指针next,它指向该结点的后继 结点。现要将指针q指向的新结点插入到指针p指向的单链表结点 之后,下面的操作序列中哪一个是正确的? 【答案】 6、C A)q=p-> next; p-> next=q-> next B)p-> next=q-> next; q=p-> next C)q-> next=p-> next; p-> next=q; D)p-> next=q; q-> next=p-> next
返回
题 2.14
int ListLength_L(LinkList L){ //L为带头结点的单链表的头指针,返回该 链表的长度,即元素个数 p=L;j=0; while(p->next) { p=p->next; ++j; } return(j); } 返回
题2.22 L
逆置线性链表 p succ p succ p succ p
【答案】 3、B
D)可方便地用于各种逻辑结构的存储表示 【答案】 4、A
5、以下关于链式存储结构的叙述中哪一条是不正确的? A) 结点除自身信息外还包括指针域,因此存储密度小于 顺序存储结 构 【答案】 5、C B) 逻辑上相邻的结点物理上不必邻接 C) 可以通过计算直接确定第i个结点的存储地址 D) 插入、删除运算操作方便,不必移动结点
例题: 1、描述以下三个பைடு நூலகம்念的区别:头指针,头结点,首元结点
(第一个元素结点)。 【解答】
头指针是指向链表中第一个结点(头结点或首元结点)的 指针;在首元结点之前附设的一个结点称为头结点;首元结 点是指链表中存储线性表中第一个数据元素结点。若链表中 附设头结点,则不管线性表是否为空,头指针均不为空,否 则表示空表的链表的头指针为空。
a1
a3
a2
a3
L
a2

a1
基 1)标志后继结点; 本 操 2)修改指针(将*p插入在头结点之后); 作 3)重置结点*p(p重新指向原表中后继); :
void inverse(LinkList &L) { // 逆置带头结点的单链表 L p=L->next; L->next=NULL; while ( p) { succ=p->next; // succ指向*p的后继 p->next=L->next; L->next=p; // *p插入在头结点之后 p = succ; } 返回 }
例题:
2、简述线性表的两种存储结构的主要优缺点及各自适用的场合。 【分析】
线性表的两种主要存储结构各有其优点和缺点,不能简单地 说哪个好哪个差,要根据实际问题和其适用的场合使用。
【解答】 顺序存储可以按位置直接存取数据元素,方便灵活,效率高, 但插入、删除操作是将引起元素移动,降低了效率;链式存储元 素存储采用动态分配,利用率高,但需增设表示结点之间有序关 系的指针域,存取数据元素不如顺序存储方便,但结点的插入、 删除操作十分简单。 顺序存储适用于线性表中元素数量基本稳定,且很少进行插 入和删除,但要求以最快的速度存取线性表中的元素的情况;而 链式存储适用于频繁进行元素的动态 插入或删除操作的场合。
相关文档
最新文档