线性表顺序存储结构上的基本运算

合集下载

数据结构 线性表

数据结构 线性表

第1讲线性表

本章主要掌握如下内容:

线性表的定义和基本操作,线性表的实现,线性表的顺序存储结构及链式存储结构,线性表的应用。

知识点分析

(一)线性表的定义和基本操作

1.线性表基本概念

1)定义:是由相同类型的结点组成的有限序列。如:由n个结点组成的线性表

(a1, a2, …, a n)

a1是最前结点,a n是最后结点。结点也称为数据元素或者记录。

2)线性表的长度:线性表中结点的个数称为其长度。长度为0的线性表称为空表。

3)结点之间的关系:设线性表记为(a1,a2,…a i-1 , a i, a i+1 ,…a n),称a i-1是a i的直接前驱结点

....(简称前驱),

a i+1是a i的直接后继结点

....(简称后继)。

4)线性表的性质:

①线性表结点间的相对位置是固定

..的,结点间的关系由结点在表中的位置确定。

②如果两个线性表有相同的数据结点,但它们的结点顺序不一致,该两个线性表也是不相等的。

注意:线性表中结点的类型可以是任何数据(包括简单类型和复杂类型),即结点可以有多个成分,其中能唯一标识表元的成分称为关键字(key),或简称键。以后的讨论都只考虑键,而忽略其它成分,这样有利于把握主要问题,便于理解。

『经典例题解析』

线性表的特点是每个元素都有一个前驱和一个后继。( )

【答案】错误。

【解析】线性表的第一个数据元素没有前驱,最后一个元素没有后继。其余的所有元素都有一个前驱和后继。

2.线性表的抽象数据类型

线性表是一个相当灵活的数据结构,其长度可以根据需要增加或减少。从操作上讲,用户不仅可以对线性表的数据元素进行访问操作,还可以进行插入、删除、定位等操作。

线性表数据结构

线性表数据结构

线性表数据结构

在计算机科学的世界里,数据结构就像是搭建高楼大厦的基石,为我们处理和组织数据提供了有力的支撑。而线性表,作为一种基础且重要的数据结构,在众多程序和算法中都有着广泛的应用。

那么,究竟什么是线性表呢?简单来说,线性表是一种有限个具有相同数据类型的数据元素所组成的序列。这些数据元素按照一定的顺序依次排列,就像我们排队时的样子,一个挨着一个。

线性表有两种常见的存储方式:顺序存储和链式存储。

顺序存储的线性表,就像是把数据元素一个一个整齐地摆放在连续的存储空间里。想象一下,有一排连续的抽屉,每个抽屉里都放着一个数据元素。要找到某个特定的数据元素,就像在这排抽屉里直接按照编号去打开对应的那个抽屉,速度非常快。但是,如果要在中间插入或者删除一个数据元素,那就麻烦了,就像要在一排已经排好的队伍中间插入或者去掉一个人,后面的所有人都得往后或者往前移动,这会耗费不少时间和精力。

相比之下,链式存储的线性表则更加灵活。每个数据元素不仅包含了自身的值,还包含了指向下一个数据元素的指针。这就像是把一个个数据元素用链条串起来,每个元素都知道下一个元素在哪里。插入和删除操作在链式存储中变得相对容易,只需要修改几个指针的指向就行了,不需要像顺序存储那样大规模地移动数据元素。但是,要找

到某个特定的数据元素,就需要沿着链条一个一个地找过去,速度可

能会比顺序存储慢一些。

为了更好地理解线性表,我们来看看它在实际中的应用。比如,我

们的手机通讯录就是一个线性表。每个联系人的信息就是一个数据元素,按照一定的顺序排列。当我们要查找某个联系人时,就相当于在

线性表的存储结构定义及基本操作

线性表的存储结构定义及基本操作

一、实验目的:

. 掌握线性表的逻辑特征

. 掌握线性表顺序存储结构的特点,熟练掌握顺序表的基本运算

. 熟练掌握线性表的链式存储结构定义及基本操作

. 理解循环链表和双链表的特点和基本运算

. 加深对顺序存储数据结构的理解和链式存储数据结构的理解,逐步培养解决实际问题的编程能力

二、实验内容:

(一)基本实验内容(顺序表):

建立顺序表,完成顺序表的基本操作:初始化、插入、删除、逆转、输出、销毁, 置空表、求表长、

查找元素、判线性表是否为空;

1.问题描述:利用顺序表,设计一组输入数据(假定为一组整数),能够对顺序表进行如下操作:

. 创建一个新的顺序表,实现动态空间分配的初始化;

. 根据顺序表结点的位置插入一个新结点(位置插入),也可以根据给定的值进行插入(值插入),形成有序

顺序表;

. 根据顺序表结点的位置删除一个结点(位置删除),也可以根据给定的值删除对应的第一个结点,或者删

除指定值的所有结点(值删除);

. 利用最少的空间实现顺序表元素的逆转;

. 实现顺序表的各个元素的输出;

. 彻底销毁顺序线性表,回收所分配的空间;

. 对顺序线性表的所有元素删除,置为空表;

. 返回其数据元素个数;

. 按序号查找,根据顺序表的特点,可以随机存取,直接可以定位于第i 个结点,查找该元素的值,对

查找结果进行返回;

. 按值查找,根据给定数据元素的值,只能顺序比较,查找该元素的位置,对查找结果进行返回;

. 判断顺序表中是否有元素存在,对判断结果进行返回;

. 编写主程序,实现对各不同的算法调用。

2.实现要求:

对顺序表的各项操作一定要编写成为C(C++)语言函数,组合成模块化的形式,每个算法的实现要

线性表的顺序存储结构

线性表的顺序存储结构

顺序映像的 C 语言描述 #define LIST_INIT_SIZE
100 //线性表存储空间的初始分配量 线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量 线性表存储空间的分配增量
typedef struct { ElemType *elem; int int // 存储空间基址
length; // 当前长度 listsize; // 当前分配的存储容量
// (以sizeof(ElemType)为单位)
} SqList; // 俗称 顺序表
Status InitList_Sq( SqList& L, int maxsize ) { // 构造一个最大容量为 maxsize 的顺序表 L.elem = new ElemType[maxsize];
// 为顺序表分配大小为 maxsize 的数组空间
if (!L.elem) exit(OVERFLOW); L.length = 0; L.listsize = maxsize; return OK; 算法时间复杂度 O(1) 时间复杂度: 时间复杂度 } // InitList_Sq
(4)线性表的插入和删除运算 ) 序号 数据元素 1 2 3 4 5 6 7 8 12 13 21 24 28 30 42 77 (a) 序号 数据元素 1 2 3 4 5 6 7 8 9 12 13 21 24 25 28 30 42 77 (b) 序号 数据元素 1 2 3 4 5 6 7 8 12 13 21 24 28 30 42 77 (a) 序号 数据元素 1 2 3 4 5 6 7 12 13 21 28 30 42 77

线性表的存储结构定义及基本操作(实验报告)

线性表的存储结构定义及基本操作(实验报告)

线性表的存储结构定义及基本操作(实验报告)

线性表的存储结构定义及基本操作一

掌握线性表的逻辑特征

掌握线性表顺序存储结构的特点熟练掌握顺序表的基本运算

熟练掌握线性表的链式存储结构定义及基本操作

理解循环链表和双链表的特点和基本运算

加深对顺序存储数据结构的理解和链式存储数据结构的理解逐步培养解决实际问题的编程能力

一基本实验内容顺序表

建立顺序表完成顺序表的基本操作初始化插入删除逆转输出销毁置空表求表长查找元素判线性表是否为空

1 问题描述

利用顺序表设计一组输入数据假定为一组整数能够对顺序表进行如下操作

创建一个新的顺序表实现动态空间分配的初始化

根据顺序表结点的位置插入一个新结点位置插入也可以根据给定的值进行插入值插入形成有序顺序表

根据顺序表结点的位置删除一个结点位置删除也可以根据给定的值删除

对应的第一个结点或者删除指定值的所有结点值删除

利用最少的空间实现顺序表元素的逆转

实现顺序表的各个元素的输出

彻底销毁顺序线性表回收所分配的空间

对顺序线性表的所有元素删除置为空表

返回其数据元素个数

按序号查找根据顺序表的特点可以随机存取直接可以定位于第 i 个结点查找该元素的值对查找结果进行返回

按值查找根据给定数据元素的值只能顺序比较查找该元素的位置对查找结果进行返回

判断顺序表中是否有元素存在对判断结果进行返回

编写主程序实现对各不同的算法调用

2 实现要求

对顺序表的各项操作一定要编写成为C C 语言函数组合成模块化的形式每个算法的实现要从时间复杂度和空间复杂度上进行评价

初始化算法的操作结果构造一个空的顺序线性表对顺序表的空间进行动态管理实现动态分配回收和增加存储空间

线性结构

线性结构

2.2 线性表的顺序存储结构
形式化算法描述: 形式化算法描述: #define true 1 #define false 0 int delete_l(listtype * list,int i) { int j; if((i<0)||(i>list->numif((i<0)||(i>list->num-1)) { printf(“not exist”); printf( not exist ); return (false); } for(j=i+1;j<listfor(j=i+1;j<list->num;j++) { list->data[j-1]=listlist->data[j-1]=list->data[j]; } list->num---; list->num--; }
a1 a2 an NIL
空表时:L=NIL 空表时:
2.3 线性表的链式存储结构
struct node { elemtype data; struct node* next; }; node为一记录,它由data和next两项组成; 为一记录,它由 为一记录 和 两项组成; next为一指针,指向node记录类型; 为一指针,指向 记录类型; 为一指针 记录类型 为数据域; data为数据域; 为数据域

数据结构-顺序表

数据结构-顺序表

数据结构-顺序表

判断题

1.(neuDS)所谓随机存取,就是通过⾸地址和元素的位序号值可以在O(1)的时间内找到指定的元素。

F

2.(neuDS)在顺序表上进⾏插⼊、删除操作时需要移动元素的个数与待插⼊或待删除元素的位置⽆关。

T F

3.顺序存储⽅式只能⽤于存储线性结构。

T F

4.在顺序表中取出第i个元素所花费的时间与i成正⽐。

T F

5.对于顺序存储的长度为N的线性表,删除第⼀个元素和插⼊最后⼀个元素的时间复杂度分别对应为O(1)和O(N)。

T F

6.(neuDS)在顺序表中逻辑上相邻的元素,其对应的物理位置也是相邻的。

F

7.顺序存储的线性表可以随机存取。

F

8.顺序存储结构的主要缺点是不利于插⼊或删除操作。

F

选择题

1.⽤数组表⽰线性表的优点是()。

A.便于插⼊和删除操作

B.便于随机存取

C.可以动态地分配存储空间

D.不需要占⽤⼀⽚相邻的存储空间

2.阅读下列程序,其功能是()。

typedef struct {

ElemType *list;

int size;

intMaxSize;

}SeqList;

void fun1(SeqList&L) {

inti, j;

ElemType temp;

for (i=0, j= L.sise-1; i<j; i++, j--) {

temp=L.list[i];

L.list[i]=L.list[j];

L.list[j]=temp;

}

}

A.将顺序表原地逆置

B.将链表原地逆置

C.将顺序表⾸尾元素对换

D.将链表⾸尾元素对换

3.顺序存储表⽰中数据元素之间的逻辑关系是由()表⽰的。

第二章基本数据结构及其运算

第二章基本数据结构及其运算

例2、n维向量X=(x1,x2,…… xn)是一个数据结构,它可表示为: D = {x1,x2,……,xn} R = {(x1,x2) , (x2,x3) , … , (xn-1,xn)}
B = (D,R)
对于复杂的数据结构,它的数据元素可以是另一种数据结构。 例:m×n的矩阵 是一个数据结构
它的每一行Ai= (ai1,ai2,…,ain)
数据结构主要研究和讨论三方面问题:
1、数据元素之间的固有逻辑关系,称为数据的逻辑结构 2、数据元素及其关系在计算机中的存储方式,称为数据的 物理结构或存储结构
3、施加在数据结构上的操作,称为数据结构的运算。数据处 理的本质就是对数据结构施加各种运算,常见的运算有:查找、 排序、插入、删除等。
主要目的是提高数据处理的效率:
例:描述四季的季节名{春、夏、秋、冬}可以作为季节(数据) 的数据元素 描述学生特征的信息:(970158、赵凯、男、1970、70), (970159、李启明、男、21、91), (970162、张军、 男、18、80)… 可以作为学生情况登记表(数据)的数据元素 甚至每一个客观存在的事件:如一次借书、一次比赛等也 可作为数据元素
逻辑结构 其数据结构表示为:D ={a1,a2 ,,an} R ={(a1,a2) ,(a2 ,a3),,(an-1, an)}
图形表示为: a1
a2

数据结构实验指导书-线性表的操作

数据结构实验指导书-线性表的操作

数据结构实验指导书-线性表的操作

实验1线性表的基本操作

一、实验目的

(1)掌握线性表的逻辑特征;

(2)掌握线性表顺序存储结构的特点,熟练掌握顺序表的基本运算;

(3)熟练掌握线性表的链式存储结构定义及基本操作;(4)理解循环链表和

双链表的特点和基本运算;

(5)加深对顺序存储数据结构的理解和链式存储数据结构的理解,逐

步培养解决实际问题的编程能力;二、实验内容

1、创建有若干个元素(可以是整型数值)的顺序表,实现对顺序表

的初始化,对已建立的顺序表插入操作、删除操作、遍历输出顺序表。

要求各个操作均以函数的形式实现,在主函数中调用各个函数实现以

下操作:

(1)从键盘上依次输入21、18、30、75、42、56,创建顺序表,并

输出顺序表中的各元素值。

(2)分别在单链表的第3个位置插入67,给出插入成功或失败的信息,并输出此时顺序表中的各元素值。

(3)删除顺序表中的第6个数据元素,给出删除成功或失败的信息,并输出此时顺序表中的各元素值。

(4)查找顺序表中是否有75这个元素,如果有返回该元素在顺序表

中的位序。

2、创建有若干个元素(可以是整型数值)的单链表,实现对单链表

的初始化,对已建立的顺序表插入操作、删除操作、查找操作、遍历输出

单链表表。要求各个操作均以函数的形式实现,在主函数中调用各个函数

实现以下操作:

(1)从键盘上依次输入21、18、30、75、42、56,创建单链表,并

输出单链表中的各元素值。

(2)分别在单链表的第4个位置,给出插入成功或失败的信息,并

输出单链表中的各元素值。

(3)删除单链表中的第2个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值。

线性表及其顺序存储结构

线性表及其顺序存储结构

3、顺序表的基本运算
1.顺序表的插入
操作接口void Insert(int i, T x):在线性 表的第i(1≤i≤n+1)个位置上插入一个新元 素x 。
插入前:(a1,…,ai-1,ai,…,an),插入后: (a1,…,ai-1,x,ai,…,an),顺序表在插 入前后的状态对比如图2.12所示。
⑷ 元素类型不确定——抽象性:数据元素的类型是抽象的、不具体的, 需要根据具体问题确定。

顺序表用一段地址连续的存储单元依次存储线性表的 数据元素。线性表(a1,a2,……,an)的顺序存储示 意图如图2.5所示。

由于线性表中每个数据元素的类型相同,可以用C++ 语言中的一维数组来实现顺序表,也就是把线性表中 相邻的元素存储在数组中相邻的位置,如图2.6所示
2.2.3 队列及其基本运算
1.什么是队列 队列(queue )是一种只允许在表的一端 进行插入,而在另一端进行删除的线性表。 允许插入(入队)的一端称为队尾(rear), 允许删除(出队)的一端称为队头(front)。 不含元素的队列称为空队列。
退出队列时,也只能按a1,a2,a3,…,an 的顺序 出队。这和日常生活中的排队是一致的。
假设给队列分配的最大存储空间为4。在图(b) 所示满队列状态下,如果还有新元素请求入队, 则会出现“上溢” 错误。

1.3 线性表及其顺序存储结构

1.3 线性表及其顺序存储结构

1.3 线性表及其顺序存储结构

1.3.1 线性表的基本概念

1.线性表的定义

在数据结构中,线性表(Linear List)是最简单也是最常用的一种数据结构。

线性表是由n(n≥0)个数据元素a1, a2, …, a n组成的有限序列。其中,数据元素的个数n定义为表的长度。当n=0时称为空表,记作( )或 ,若线性表的名字为L,则非空的线性表(n>0)记作:

L=(a1,a2,…,a n)

这里a i(i=1,2,…,n)是属于数据对象的元素,通常也称其为线性表中的一个结点。线性表的相邻元素之间存在着前后顺序关系,其中第一个元素无前驱,最后一个元素无后继,其他每个元素有且仅有一个直接前驱和一个直接后继。可见,线性表是一种线性结构。

例如,英文字母表(A, B, C, …, Z)就是一个长度为26的线性表,表中的每一个英文字母是一个数据元素,四季(春、夏、秋、冬)是一个长度为4的线性表,其中每一个季节是一个数据元素。

矩阵也是一个线性表,只不过它是一个比较复杂的线性表。在矩阵中,既可以把每一行看成一个数据元素(既每一行向量为一个数据元素),也可以把每一列看成一个数据元素(即每一列向量为一个数据元素)。其中每一个数据元素(一个行向量或者一个列向量)实际上又是一个简单的线性表。

在复杂的线性表中,一个数据元素由若干数据项组成,此时,把数据元素称为记录(record),而由多个记录构成的线性表又称为文件(file)。例如,一个按照姓名的拼音字母为序排列的通信录就是一个复杂的线性表,见表1-4,表中每个联系人的情况为一个记录,它由姓名、性别、电话号码、电子邮件和住址5个数据项组成。

基本数据结构和算法

基本数据结构和算法

1.基本数据结构与算法

1.1算法

算法:是指解题方案的准确而完整的描述。

特征包括:

(1)可行性;(2)确定性,(3)有穷性,(4)拥有足够的情报。

算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构。

指令系统:一个计算机系统能执行的所有指令的集合。

基本运算和操作包括:算术运算、逻辑运算、关系运算、数据传输。

算法的控制结构:顺序结构、选择结构、循环结构。

算法基本设计方法:列举法、归纳法、递推、递归、减斗递推技术、回溯法。

算法复杂度:算法时间复杂度和算法空间复杂度。

算法时间复杂度是指执行算法所需要的计算工作量。

算法空间复杂度是指执行这个算法所需要的内存空间。

数据的存储结构有顺序、链接、索引等。

线性结构条件:

(1)有且只有一个根结点;

(2)每一个结点最多有一个前件,也最多有一个后件。

非线性结构:不满足线性结构条件的数据结构。

1.3线性表及其顺序存储结构

非空线性表的结构特征:

(1)且只有一个根结点a1,它无前件;

(2)有且只有一个终端结点an,它无后件;

(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。结点个数n称为线性表的长度,当n=0时,称为空表。

线性表的顺序存储结构具有以下两个基本特点:

(1)线性表中所有元素的所占的存储空间是连续的;

(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。

顺序表的运算:插入、删除。

1.4栈和队列

a)栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。

栈按照“先进后出"(FILO)或“后进先出"(LIFO)组织数据,栈具有记忆作用。用top表示栈顶位置,用bottom表示栈底。

第2章 线性表

第2章  线性表

算法思想:① 依次从LB中取出一个DE; ② 判在LA中是否存在; ③ 若不存在,则插入到LA中。
void unionList(List LA,List LB,List &LC)
{ int lena,lenc,i; ElemType e; InitList(LC); for (i=1;i<=ListLength(LA);i++)
当n=0时,表示线性表是一个空表,即表中不包 含任何元素。设序列中第i(i表示位序)个元素为 ai(1≤i≤n)。
线性表是n个数据元素的有限序列,记为: L=(a1,a2, …,an)
•例1、26个英文字母组成的字母表 • (A,B,C、…、Z) •例2、某校从1978年到1983年各种型号的计算机 拥有量的变化情况。 • (6,17,28,50,92,188) •例3、一副扑克的点数 • (2,3,4,…,J,Q,K,A)
存储地址 LOC(A) LOC(A)+sizeof(ElemType) LOC(A)+(i-1)*sizeof(ElemType) LOC(A)+(n-1)*sizeof(ElemType)
LOC(A)+(MaxSize-1)*sizeof(ElemType)
顺序表示意图
由于C语言中的一维数组也是采用顺序存储表示,故 可以用数组类型来描述顺序表。又因为除了用数组 来存储线性表的元素之外,顺序表还应该用一个变 量来表示线性表的长度属性,所以用结构类型来定 义顺序表类型。 假定数组用data[MaxSize]表示,长度整型变量用 length表示,并采用结构体类型表示,则元素类型为通 用类型标识符ElemType的线性表的顺序存储类型可 描述如下:

第3章线性表概要

第3章线性表概要


返回
2.2 线性表的顺序存储结构

顺序存储结构

指用一组连续 的存储单元依 次存储线性表 中的每个数据 元素。如右图 所示:
存储地址 内存单元 ... d a1 d+L a2 d+2L a3 ... d+(i-1)L ai ... d+(n-1)L an ... ...
说明:L为每个数据元素所占据的存储单元数目。
Lb=(book1,book2,...,book100) 数据元素类型为下 列所示的结构类型: struct bookinfo{ int No; //图书编号 char *name; //图书名称 char *auther; //作者名称 ...; } 在现实中,这种类型的数据结构很多很多,如学 生档案学籍系统、图书管理系统、仓库管理系统、 设备管理系统等


线性表特点

特点

除第一个和最后一个元素外,其他元素都存在 唯一的前驱、后继关系 La=(34,89,765,12,90,-34,22) 数据 元素类型为int。 Ls=(Hello,World, China, Welcome) 数 据元素类型为string。

举例




举例
线性表的基本操作

1. 初始化线性表L void InitList( ) 2. 求线性表的长度:int Length() 3.取表元:DataType Get(int i) 4.按值查找:int Locate(DataType x) 5.插入操作:int Insert(DataType x, int i) 6.删除操作:int Deleted(int i)

数据结构图实验报告

数据结构图实验报告

数据结构图实验报告

一、实验目的

本次实验的主要目的是深入理解和掌握数据结构图的基本概念、原

理和操作方法,通过实际编程和操作,提高对数据结构的应用能力和

解决问题的能力。

二、实验环境

本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。

三、实验内容

(一)线性表

1、顺序表

实现顺序表的创建、插入、删除、查找等基本操作。

分析顺序表在不同操作下的时间复杂度。

2、链表

实现单链表、双向链表的创建、插入、删除、查找等基本操作。

比较单链表和双向链表在操作上的优缺点。

(二)栈和队列

1、栈

实现顺序栈和链式栈。

用栈解决表达式求值问题。

2、队列

实现顺序队列和链式队列。

用队列模拟银行排队问题。

(三)树

1、二叉树

实现二叉树的创建、遍历(前序、中序、后序)。计算二叉树的深度和节点数。

2、二叉搜索树

实现二叉搜索树的插入、删除、查找操作。

分析二叉搜索树的性能。

(四)图

1、图的存储

实现邻接矩阵和邻接表两种图的存储方式。

比较两种存储方式的优缺点。

2、图的遍历

实现深度优先遍历和广度优先遍历算法。

用图的遍历解决最短路径问题。

四、实验步骤

(一)线性表

1、顺序表

定义一个数组来存储顺序表的元素,并使用一个变量记录当前表的长度。

插入操作时,需要判断插入位置是否合法,如果合法则将插入位置后的元素依次向后移动一位,然后将新元素插入指定位置。

删除操作时,先判断删除位置是否合法,合法则将删除位置后的元素依次向前移动一位,并更新表的长度。

查找操作通过遍历数组来实现。

分析不同操作的时间复杂度,插入和删除操作在最坏情况下为

O(n),查找操作在平均情况下为 O(n/2)。

数据结构课件之线性表(ppt 86页)

数据结构课件之线性表(ppt 86页)

17
15.10.2019
删除算法示意
将线性表(4,9,15,21,28,30,30,42,51,62)中的第5个元素 删除。
序号
1 2 3 4 5 6 7 8 9 10 4 9 15 21 28 30 30 42 51 62
删除28后 4 9 15 21 30 30 42 51 62
18
15.10.2019
loc(ai) =loc(a1)+(i-1)×k
8
15.10.2019
顺序存储结构示意图
存储地址
Loc(a1) Loc(a1)+(2-1)k

loc(a1)+(i-1)k

loc(a1)+(n-1)k
...
loc(a1)+(maxlen-1)k
内存空间状态
a1 a2

ai

an
9
逻辑地址
1 2

i
注意区分元素的序号和数组的下标,如a1的序号为1,而 其对应的数组下标为0。
10
15.10.2019
2.2.2 线性表顺序存储结构的基本运算
线性表的基本运算:
1. 查找操作 2. 插入操作 3. 删除操作 4. 顺序表合并算法
线性表顺序存储结构的优缺点分析
11
15.10.2019
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验项目名称:线性表的顺序存储结构上的基本运算

(所属课程:数据结构--用C语言描述)

院系:计算机科学与信息工程学院专业班级:网络工程

姓名:000000 学号:0000000000 实验日期:2016.10.20 实验地点:A-06 406 合作者:指导教师:孙高飞

本实验项目成绩:教师签字:日期:

(以下为实验报告正文)

一、实验目的

本次实验的目的掌握顺序表的存储结构形式及其描述和基本运算的实现;掌握动

态链表结构及相关算法设计

实验要求:输入和验证程序例题。正确调试程序,记录程序运行结果。完成实验报

告。

二、实验条件

Windows7系统的电脑,vc++6.0软件,书本《数据结构--用c语言描述》

三、实验内容

3.1 根据41页代码,用c语言定义线性表的顺序存储结构。

3.2 根据42页算法2.1实现顺序表的按内容查找。

3.3 根据43页算法2.2实现顺序表的插入运算。

3.4 根据45页算法2.3实现顺序表的删除运算。

四、实验步骤

3.2实验步骤

(1)编写头文件,创建ElemType。

(2)根据根据41页代码,“用c语言定义线性表的顺序存储结构”定义顺序表。

(3)根据42页算法2.1实现顺序表的按内容查找,创建Locate函数。

(4)创建main函数,输入SeqList L的数据元素。

(5)输入要查找的数据元素的值,调用Locate函数,输出结果。

3.3实验步骤

(1)编写头文件,创建ElemType。

(2)根据41页代码,“用c语言定义线性表的顺序存储结构”定义顺序表。

(3)根据43页算法2.2实现顺序表的插入运算,创建InsList函数。

(4)创建printList函数,逐项输出顺序表内的元素及顺序表元素的个数。

(5)创建main函数,输入插入的元素和其位置,调用printLinst函数输出顺序表,调用IntList函数,再次调用printLinst函数输出顺序表。

3.4实验步骤

(1)编写头文件,创建ElemType。

(2)根据根据41页代码,“用c语言定义线性表的顺序存储结构”定义顺序表。

(3)根据45页算法2.3实现顺序表的删除运算,创建DelList函数。

(4)创建printList函数,逐项输出顺序表内的元素及顺序表元素的个数。

(5)创建main函数,输入删除元素的位置,调用printLinst函数输出顺序表,调用DelList函数,再次调用printLinst函数输出顺序表。

五、实验结果

(1)实验3.2顺序表的按内容查找

# include

typedef int Elemtype;

typedef struct{

Elemtype elem[100];

int last;

}SeqList;

int Locate(SeqList L,Elemtype e){

int i;

i=0;

while((i<=st)&&(L.elem[i]=e)) i++;

if(i<=st)

return(i+1);

else

return(-1);

}

void main(){

SeqList s={{1,2,3,6,8,10,5,3},7};

int e=5;

int pos=Locate(s,e);

printf("Locate to %d\n",pos);

}

(2)实验3.3顺序表的插入运算

# include

typedef int Elemtype;

typedef struct{

Elemtype elem[100];

int last;

}SeqList;

#define OK 1

#define ERROR 0

int IntList(SeqList*L,int i,Elemtype e) {

int k;

if((i<1)||(i>L->last+2))

{

printf("插入位置i值不合法");

return(ERROR);

}

if(L->last>=100-1)

{

printf("表已满,无法插入");

return(ERROR);

}

for(k=L->last;k>=i-1;k--)

L->elem[k+1]=L->elem[k];

L->elem[i-1]=e;

L->last++;

return(OK);

}

void printList(SeqList s)

{

for(int i=0;i<=st;i++)

printf("%d\t",s.elem[i]);

printf("\n");

}

void main(){

SeqList L={{1,2,4,6,8,10,5,11},8};

printList(L);

IntList(&L,3,10);

printList(L);

}

(3)实验3.4顺序表的删除运算

# include

typedef int Elemtype;

相关文档
最新文档