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

合集下载

线性表的顺序存储结构是一种什么存储结构

线性表的顺序存储结构是一种什么存储结构

线性表的顺序存储结构是一种什么存储结构

线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储),但是把最后一个数

据元素的尾指针指向了首位结点)。

我们说“线性”和“非线性”,只在逻辑层次上讨论,而不考虑存储层次,所以双向

链表和循环链表依旧是线性表。

在数据结构逻辑层次上细分,线性表可以分成通常线性表和受到限制线性表。通常线

性表也就是我们通常所说的“线性表”,可以民主自由的删掉或嵌入结点。受到限制线性

表主要包含栈和队列,受到限制则表示对结点的操作方式受限制。

线性表的逻辑结构简单,便于实现和操作。因此,线性表这种数据结构在实际应用中

是广泛采用的一种数据结构。

线性表就是一种常用的数据结构,以下了解线性表及其顺序存储,并对栈和队列及它

们的顺序同时实现得出了详尽的设计叙述。

在实际应用中,线性表都是以栈、队列、字符串等特殊线性表的形式来使用的。由于

这些特殊线性表都具有各自的特性,因此,掌握这些特殊线性表的特性,对于数据运算的

可靠性和提高操作效率都是至关重要的。

线性表就是一个线性结构,它就是一个所含n≥0个结点的非常有限序列,对于其中

的结点,存有且仅有一个已经开始结点没前驱但存有一个后继结点,存有且仅有一个终端

结点没后继但存有一个前驱结点,其它的结点都存有且仅有一个前驱和一个后继结点。通

常地,一个线性表可以则表示成一个线性序列:k1,k2,…,kn,其中k1就是已经开始结点,kn就是终端结点。

计算机二级公共基础部分:线性表及其顺序存储结构

计算机二级公共基础部分:线性表及其顺序存储结构

计算机二级公共基础部分:线性表及其顺序存储结构:

1.3.1线性表的基本概念:

线性表:由n(n≥20)个相同类型数据元素构成的有限序列

n定义为线性表的表长;n=时的线性表被称为空表。称i为在线性表中的位序。

例如:

英文大写字母表(A,B,C,D,E,F,...X,Y,Z)

同一花色的13张扑克牌

。(2,3,4,5,6,7,8,9,10,J,Q,K,A)

线性表的结构特征:

数据元素在表中的位置由序号决定,数据元素之间的相对位置是线性的;

对于一个非空线性表,有且只有一个根节点a1,它无前件,有且只有一个终端结点a n, 它无后件,除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。线性表的存储结构:

顺序存储

链式存储

两个基本特点:

线性表中所有元素所占的存储空间是连续的。

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

该内容考点:

重点:插入,删除,查找,排序

难点:1分多分解,合并n合1,copy,逆转

顺序表的插入和删除分析

插入算法的分析

假设线性表中含有n个数据元素,在进行插入操作时,若假定在n+1个位置上插入元素的可能性均等,则平均移动的元素个数为:

E is=

1

n+1

∑p i(n−i+1)=

n

2 n+1

i=1

删除算法的分析

在进行删除操作时,若假定删除每个元素的可能性均等,则平均移动元素的个数为:

E dl=1

n

∑p i(n−i)=

n+1

2 n

i=1

分析结论

顺序存储结构表示的线性表,在做插入或删除时,平均需要移动大约一半的数据元素。当线性表的数据元素量较大,并且经常要对其做插入或删除操作时,这一点值得考虑

线性表之顺序存储结构

线性表之顺序存储结构

一、实验目的:

1. 熟练掌握线性表的基本操作在顺序存储和链式存储上的实现;

2. 以线性表的各种操作(建立、插入、删除等)的实现为重点;

3. 掌握线性表的动态分配顺序存储结构的定义和基本操作的实现;

二、实验内容:

1.输入一组整型数据,建立顺序表。

2.实现该线性表的删除。

3、实现该线性表的插入。

4.实现线形表中数据的显示。

5.实现线性表数据的查找和定位

5、编写一个主函数,调试上述算法。

三、实验原理、方法和手段

1.根据实验内容编程,上机调试、得出正确的运行程序。

2. 编译运行程序,观察运行情况和输出结果。

3. 写出实验报告(包括源程序和运行结果)。

四、实验条件

运行Visual stadio 2010的微机一台

五、实验步骤(程序清单):

// 实验一.cpp : 定义控制台应用程序的入口点。

//

#include"stdafx.h"

#include<iostream>

#include<string.h>

#include<stdlib.h>

using namespace std;

typedef int ElemType;

struct List

{

ElemType *list;

int size;

int MaxSize;

};

void InitList(List &L,int n) //初始化线性表

{

L.MaxSize =n+5;

L.list=new ElemType [L.MaxSize];

if(L.list==NULL)

{ cout<<"动态可分配的存储空间已用完,退出运行!"<<endl;

数据结构实验报告1线性表的顺序存储结构

数据结构实验报告1线性表的顺序存储结构

数据结构实验报告1线性表的顺序存储结构数据结构实验报告1线性表的顺序存储结构

第一章引言

线性表是计算机中最常见的数据结构之一,它是一种有序的数据元素集合,其中的数据元素之间具有一对一的关系。线性表的存储结构有多种方式,其中顺序存储结构是最简单的一种,它使用一段连续的存储单元来存储线性表中的元素。

第二章顺序存储结构的定义

顺序存储结构是将线性表中的元素按照其逻辑顺序依次存储在一块连续的存储空间中。顺序存储结构的特点是可以快速地访问任意位置的元素,但插入和删除操作需要移动大量的元素。

第三章顺序存储结构的实现

1.存储空间的分配

顺序存储结构通常使用数组来实现,数组的长度应该大于等于线性表的长度,以防止溢出。存储空间的分配可以使用静态分配或动态分配两种方式来实现。

2.线性表的初始化

初始化线性表时,需要设置线性表的长度和当前元素的个数。

3.线性表的增删改查操作

●插入操作:________在指定位置插入一个元素时,需要将插入位置之后的元素依次后移,给待插入的元素腾出位置。

●删除操作:________删除指定位置的元素时,需要将删除位置之后的元素依次前移,覆盖删除位置上的元素。

●修改操作:________修改指定位置的元素时,直接对该位置上的元素进行修改即可。

●查找操作:________根据指定的元素值,查找其在顺序存储结构中的位置。

4.线性表的遍历操作

遍历操作可以按照顺序访问线性表中的每个元素,可以使用循环结构实现遍历操作。

第四章顺序存储结构的优缺点分析

1.优点:________可以快速地访问任意位置的元素,节省存储空间。

第3章 线性表及其存储结构

第3章 线性表及其存储结构

长度为 n的线 性表在 计算机 中的顺 序存储 结构如 图3-1 所示。
在程序设计语言中,通常定义一个一维数组 来表示线性表的顺序存储空间。
应注意数组的基本类型要与线性表中数据元 素的类型相同。
数组需要根据情况预设足够的大小,同时 还需要一个变量指出线性表在数组中的当前 状况,如元素个数或最后一个元素在数组中 的位置等。这两方面的信息共同描述一个顺 序表,可将它们封装在一起。对C语言,顺序 表可定义如下:
一般情况下,要在第i(1≤i≤n)个元素之 前插入一个新元素时,首先要从最后一个元 素开始,直到第i个元素之间共 n-i+1 个元 素依次向后移动一个位置。移动结束时,第i 个位置就被空出,然后将新元素插入,插入 结束线性表的长度增1。在平均情况下,插入 一个新元素,需要移动表中一半的元素。
注意:若最后一个元素之后没有多余的自由 空间(即表的大小n=MaxLength)时,那么 插入一个元素,将会发生上溢。 在顺序表L中的第i个元素之前插入一个新元 素x的算法InsertList描述如下:
链式存储结构,既可用来表示线性结构, 也可用来表示非线性结构。线性表的链式存 储结构,称为线性链表。 对线性链表而言,它不要求逻辑上相邻的 元素在物理位置上也相邻。其存储单元既可 以是连续的,也可以是不连续的,甚至可以 零散分布在内存中的任何位置上。 通常,为了适应线性链表的存储,计算机 的存储空间被划分成一个一个的小块,每一 小块占若干字节,这些小块就是存储结点。 存储结点的结构,如图 3-2 所示。

线性表的存储结构与顺序表的存储实现

线性表的存储结构与顺序表的存储实现

数据结构实验报告

课程名称数据结构

学院信息工程

专业班级信工二班

学号

姓名

20 17 年 4月16日

实验一:线性表的存储结构与顺序表的存储实现#include

#include

#define OK 1

#define LIST_INIT_SIZE 100

#define OVERFLOW 0

typedefintElemType;

typedefint Status;

typedefstruct

{

ElemType*elem;

int length;

intlistsize;

}

SqList;

intInitList_Sq(SqList&L){

L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(!L.elem)exit(OVERFLOW);

L.length=0;

L.listsize=LIST_INIT_SIZE;

return OK;

}

voidCreate_Sq(SqList&L)

{

inti,n;

printf("创建一个有序表:\n");

printf("输入有序表中元素个数:");

scanf("%d",&n);

L.length=n;

for(i=0;i

{

printf("输入第%d个元素的值:",i+1);

scanf("%d",&L.elem[i]);

printf("\n");

}

}

voidDisp_Sq(SqList L){

inti,n;

n=L.length;

for(i=0;i

printf("%5d",L.elem[i]);

printf("\n");

线性表的顺序存储——顺序表

线性表的顺序存储——顺序表

线性表的顺序存储——顺序表

之前我们讲了线性表, 本篇来阐述下线性表的顺序存储——顺序表

定义

线性表的顺序存储⼜称为顺序表, 它是⽤⼀组地址连续的存储单元依次存储线性表中的数据元素. 逻辑上相邻的两个数据元素在物理位置上同样相邻.

规律

顺序表中逻辑顺序与物理顺序相同

L = ($a_{1}$, $a_{2}$, ..., $a_{i}$, $a_{i + 1}$, ..., $a_{n}$)

其中在逻辑上相邻的两个数据元素,在顺序表中也存放在相同的存储单元当中,每⼀个⼩格⼦就代表⼀个存储单元。

注线性表中的元素的位序是从1开始, ⽽数组中元素下标是从0开始的

若线性表存储的起始位置为Loc(A), sizeof(ElemType)为每个数据元素所占⽤的存储空间⼤⼩, 那么根据这⼀特点,我们可以计算出每⼀个数据元素存储的地址。

第⼀个元素的地址是 LOC(A),计算第⼆个元素的地址就可以⽤第⼀个元素的地址加上第⼀个数据元素 $a_{1}$ 所消耗的存储空间,⽤ sizeof 可求得该数据元素所消耗的存储空间⼤⼩。这⾥需要注意的⼀点是,n 与 MaxSize 是有含义上的不同的,其中 $a_{n}$ 代表的是顺序表中最后⼀个数据元素,⽽ MaxSize 代表的是数组的最后⼀个存储单元。

顺序表的两种实现⽅法

顺序表可以⽤数组来实现。根据数组的两种分配⽅式,也就有两种描述顺序表的⽅法。分别是静态描述分配顺序表的⽅法和动态描述分配顺序表的⽅法。⾸先来看数组静态分配时时如何描述⼀个顺序表的。

静态描述分配顺序表

#define MaxSize 50

2-3线性表的顺序存储(《数据结构——从概念到C实现(第2版)》王红梅 清华大学出版社)

2-3线性表的顺序存储(《数据结构——从概念到C实现(第2版)》王红梅 清华大学出版社)

{
if (n > MaxSize) {
printf("顺序表的空间不够,无法建立顺序表\n");
return 0;
}
for (int i = 0; i < n; i++)
L->data[i] = a[i];
L->length = n; return 1;
数组 a 35 12 24 33 42
}
顺序表 L 35 12 24 33 42
插入操作是否成功
操作接口:int Insert(SeqList *L, int i, DataType x)
数 据 结 构 ( 从 概 念 到 实 现 ) 清 华 大 学 出 版 社
Page 17
顺序表的实现——插入
例 1 对于线性表(35,12,24,42),在 i = 2的位置上插入元素33
01234
Page 8
顺序表的实现——判空
顺序表判空的函数原型是什么?
算法描述:
Empty
数 据
输入:无

int Empty(SeqList *L)
构 (
功能:判断表是否为空
{
从 概 念
输出:若是空表,返回 1,否则返回 0 if (L->length == 0) return 1;
到 实 现 )

线性表之顺序存储结构

线性表之顺序存储结构

线性表之顺序存储结构

数据结构和算法是程序设计的灵魂。坦诚的说,我在这方面是弱的可以。虽然工作这么多年了,因为种种借口,这块知识一直是我的痛处。

曾经在面试时大言不惭的说,这些知识在工作中很少用到,所以当年学习的东西早就还给学校了。其实不然,失去了灵魂的程序员如我,总是要逆袭的。

所以以后的学习中会有一些如孩童笔记般的文章出现在我的blog中,请大师们不要嘲笑,要提携。

定义

线性表可以说是最简单的数据结构,它的描述为:n个数据元素的有限序列。

记为:L=(a1,a2,...,an)

按照存储结构它又可以分为顺序存储结构和链式存储结构。

而其中线性表的顺序存储结构是最简单最常用的数据结构:用一段连续地址依次存储表中的数据元素。

看到这里,我们会自然的联想到C语言中的数组。

下面我要实现的是线性表中的元素为整型的顺序存储结构,及它的主要运算:增删查。

先来简单的定义一下这个线性表的顺序存储结构:

#define MAXLENGTH 20

struct sequencelist

{

int data[MAXLENGTH];

int length;

};

其中data数组为这个线性表的主要部分,数据元素就存在于此数组中,而对这个线性表的操作都是基于这个数组。

length是这个线性表的一个属性,表示这个线性表包含元素的个数。

增:线性表的插入操作

对线性表的插入就是对data数组的插入,然后将其length增加。

//insert opration

int insert(struct sequencelist *list,int index,int element)

【数据结构】线性表顺序表详解和代码实例

【数据结构】线性表顺序表详解和代码实例

【数据结构】线性表顺序表详解和代码实例

线性表(List)是零个或者多个数据元素的有限序列.

⾸先它是⼀个序列.⾥⾯的元素是有顺序的,如果有多个元素,除开头和结尾以外的元素都有⼀个前驱和⼀个后继.⽽开头元素只有后继,结尾元素只有前驱.

其次线性表是有限的,也就是⾥⾯的元素个数是有限的。

1ADT 线性表(List)

2Data

3线性表的数据对象集合为{a1, a2, a3, ......, an},每个元素类型为DataType。

4Operation

5InitList(L); //初始化线性表

6 IsEmptyList(L); //判断线性表是否为空

7 ClearList(L); //清空线性表

8 GetElemList(L, i, *e); //获取第i个位置的数据

9 SearchList(L, e); //查找与数据e相等的元素

10 InsertNodeList(L, i, e);//在第i个位置插⼊元素

11 DeleteNodeList(L, i, *e);//删除第i个位置的元素,e获取删除元素

12 GetLengthList(L); //获取线性表的长度

13endADT

关于线性表的基本操作就上⾯⼏种,还有⼏个例如线性表的排序,合并,逆序等等操作。为了⽂章篇幅,就下次再介绍了。

线性表的顺序存储结构,就是指 ⽤⼀段地址连续的存储单元⼀次存储线性表的数据元素。学过⾼级语⾔的朋友,相信对数组这玩意⼉都不会陌⽣吧。数组就是⼀种顺序存储结构。

链式存储结构就是可以⽤⼀组任意的内存单元存储线性表中的元素。与顺序存储不同的是,这组内存单元可以是连续的,也可以是不连续的。这就意味着,元素可以存储在内存的任意位置。正因为如此,在链式结构中,每个元素不仅要存它的信息,还需要存储它后继元素的存储地址。我们把存储元素信息的域称为数据域,⽽把存储后继元素地址的域称为指针域。由这两部分共同组成的数据元素ai,则可以称之为节点(Node)。如下⾯这个图所⽰:

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个数据项组成。

线性表的顺序存储结构实验报告总结

线性表的顺序存储结构实验报告总结

线性表的顺序存储结构实验报告总结

一、需求分析

⒈本程序中,要求输入到表A,B中的元素是整形的,并且要按非递增顺序输入,否则系统会给出“出错信息”。输出结果应该是一个不含有重复元素的非递增的表。

⒉本程序以用户和计算机的对话方式执行,即在计算机演示界面上显示“提示信息”后,由用户在键盘上输入相应的信息;相应的输入数据和运算结果显示在其后。

⒊程序执行的命令包括:

(1)构造线性表A (2)构造线性表B (3)检验表A,B是否非递减有序(4)求表A与B的合并(5)删除表中值相同的多余元素(6)结束。

4.测试数据

(1)A=123

(2)A=9 5 0 -2

B=1050-1-3-5 -10

二、概要设计

⒈为实现上述算法,需要线性表的抽象数据类型:

ADT Stack {

数据对象:D={ai:|ai∈ElemSet,i=1…n,n≥0}

数据关系:R1={<ai-1,ai>|ai-1,ai∈D,i=2,…n}

基本操作:

init(list *L)

操作结果:构造一个空的线性表L。

InputList(List *L)

初始条件:线性表L已经存在

操作结果:人工输入了一张表。

CheckList(List *L)

初始条件:线性表L已经存在

操作结果:判断L是否非递增有序,若为否,则重新输入。MergeList(List *La,List *Lb,List *Lc)

初始条件:非递增线性表La,Lb已经存在

操作结果:合并La,Lb得到Lc,Lc仍按非递增有序排列。DeleteSame(List *L)

初始条件:非递增线性表L已经存在

线性表的顺序存储结构中,逻辑上相邻

线性表的顺序存储结构中,逻辑上相邻

线性表的顺序存储结构中,逻辑上相邻顺序存储结构的线性表称作顺序表。在计算机中用一组地址连续的存储单元依次存储线性表的各个数据元素,称作线性表的顺序存储结构。

顺序存储结构是存储结构类型中的一种,该结构是把逻辑上相邻的结点存储在物理位置上相邻的存储单元中,结点之间的逻辑关系由存储单元的邻接关系来体现。

实现顺序存储结构的方法是使用数组。数组把线性表的数据元素存储在一块连续地址空间的内存单元中,这样线性表中逻辑上相邻的数据元素在物理存储地址上也相邻。数据元素间的逻辑上的前驱、后继逻辑关系就表现在数据元素的存储单元的物理前后位置上。

顺序存储结构的主要优点是节省存储空间,因为分配给数据的存储单元全用存放结点的数据(不考虑c/c++语言中数组需指定大小的情况),结点之间的逻辑关系没有占用额外的存储空间。采用这种方法时,可实现对结点的随机存取,即每一个结点对应一个序号,由该序号可以直接计算出来结点的存储地址。但顺序存储方法的主要缺点是不便于修改,对结点的插入、删除运算时,可能要移动一系列的结点。

线性表及其顺序存储结构

线性表及其顺序存储结构

线性表及其顺序存储结构

清点人数,组织教学。

复习:

IP 地址与域名系统

授新:

一、数据结构的主要研究内容数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构作为计算机的一门学科,主要研究和讨论以下三个方面的问题:

1.数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构。数据的逻辑结构是从逻辑关系上描述数据,与数据的存储无关,是独立于计算机的。数据的逻辑结构可以看作是从具体问题抽象出来的数学模型。数据的逻辑结构包含:

(1)表示数据元素的信息;

(2)表示各数据元素之间的前后件关系。

2.各数据元素在计算机中存储关系,即数据的存储结构。数据的存储结构有顺序、链接、索引等。数据的存储结构是逻辑结构用计算机语言的实现(亦称为映象),它依赖于计算机语言。对机器语言而言,存储结构是具体的。一般只在高级语言的层次上讨论存储结构。

对各种数据结构进行的运算。

3.数据的运算定义在数据的逻辑结构上,每种逻辑结构都有一个运算的集合。最常用的检索、插入、删除、更新、排序等运算实际上只是在抽象的数据上所施加的一系列抽象的操作。所谓抽象的操作,是指只知道这些操作是“做什么”,而无须考虑“如何做”。只有确定了存储结构之后,才考虑如何具体实现这些运算。

二、数据结构基本概念

1、数据数据是指所有能输入到计算机中并被计算机程序处理的符号的总称。数据是信息的载体,它能够被计算机识别、存储和加工处理,是计算机程序加工的“原料”。随着计算机应用领域的

扩大,数据可以分为两大类:一类是整数、实数等数值数据;另一类是图形、图像、声音、文 字等非数值数据。这里要注意数据并不等于数字,数字是隶属于数据的。

数据结构——线性表(顺序实现)

数据结构——线性表(顺序实现)

数据结构——线性表(顺序实现)

好好学习基础知识,出⼈头地就靠它了,内外兼修。(好吧,我现在内外都不⾏)写这篇⽂章的⽬的就是为了,巩固刚学完的线性表,个⼈能⼒有限,若有不当之处,望指出。线性表

好了,扯完了,说正事:

1、定义

线性表是⼀种及其常⽤的并且最简单的⼀种数据结构。简单来说,线性表就是集合⾥的元素的有限排列。(在这⾥我把集合定义为具有相同属性的元素,会有些狭义)

在线性表中数据元素之间的关系是⼀对⼀的关系,即除了第⼀个和最后⼀个数据元素之外,其它数据元素都是⾸尾相接的(注意,这句话只适⽤⼤部分线性表,⽽不是全部。⽐如,循环链表逻辑层次上也是⼀种线性表(存储层次上属于链式存储),但是把最后⼀个数据元素的尾指针指向了⾸位结点)[]

怎么说呢,毕竟数据结构毕竟是逻辑结构,逻辑上符合线性结构的特征即可,存储结构能实现就⾏。线性表的很重要!很重要!很重要!后⾯的栈,队列,串等都是基于线性表的基础上实现的,所以说⼀定要学好线性表

2、线性表的特点:

对于任意的的⾮空线性表或者线性结构有:

1、存在唯⼀⼀个被称为 ”第⼀个“的元素

2、存在唯⼀⼀个被称为 ”最后⼀个“的元素

3、出第⼀个元素之外,每⼀个元素都存在⼀个后继

4、除最后⼀个元素之外,每⼀个元素都存在⼀个前驱

3、基本操作

1、Create(*L)创建空表

2、InitEmpty(*L)初始化

3、getLength(*L)获取长度

4、Insert(*L)插⼊元素

5、Remove(*L)移除元素

6、IsEmpty(*L)空表检测

线性表的顺序存储结构实验报告总结

线性表的顺序存储结构实验报告总结

线性表的顺序存储结构实验报告总结

一、目的

1.做实验的目的

加深对线性表的理解,学会定义线性表的存储结构,掌握线性表的基本操作。

2.撰写实验报告的目的

对本次实验情况进行总结,加强对实验内容的理解,对实验过程有一-个系统的认识,从中获得本次试验的经验,并

对实验结果进行适当的分析,加深对栈和队列的理解和认识。

二、内容

1.说明实验次数及实验内容

本次实验用一次实验课时完成

实验内容:

节点定义:

typedef struct node{

int idx: int age: struct node *next:

}Node, *List;

本次实验的对象的存储内容包括功D和AGE,所以定义了如上的结构

体,idx用于存储ID号,age用于存储年龄,next用于形成链式结构,Node定义了该类型的一一个节点,List定义了该

类型的--个链表。

(1)、编写函数CreateList ()和PrintList(),从给定数组创建链表,打印链表。

int idx[8] = {1,2,3,4,5,6, 7,8}:

int age[8] = {15, 18, 13, 22, 50, 18, 30, 20} :

List CreatList(int idx[],int age[], int 1en) {}

int PrintList(List L) {}

(2)、编写函数DeleteNode(List L, int delete_ age),完成以下操作。int DeleteNodeAge(List L, int

delete_ age) {}

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

1.线性表的基本概念

线性表是由n个数据元素组成的一个有限序列,表中的每一个数据元素,除了每一个外,有且只有一个前件,除了最后一个外,有且只有一个后件。即线性表或是一个空表。

显然线性表是一种线性结构,数据元素在线性表中的位置只取决于它们自己的序号,即数据元素之间的相对位置是线性的。

非空线性表有如下一些结构特征:

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

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

(3)除了根结点与终端结点外,其他所有结点有且只有一个前件,也只有且只有一个后件。

2.线性表的存储结构

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

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

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

由此可以看出,在线性表的顺序存储结构中,其前件和后件两个元素在存储空间中是紧邻的,且其前件元素一定存储在后件元素的前面。

在程序设计语言中,通常定义一个一维数组来表示线性表的顺序存储看见。因为程序设计语言中的一维数组与计算机中的实际的存储空间结构是类似的,这就便于用程序设计语言对线性表进行各种运算处理。

在线性表的顺序存储结构中,可以对线性表进行各种处理。主要的运算有如下几种:

(1)在线性表的指定位置处加入一个新的元素;

(2)在线性表中删除指定的元素;

(3)在线性表中查找某个特定的元素;

(4)对线性表中的元素进行整序;

(5)按要求将一个线性表分解成多个线性表;

(6)按要求将多个线性表合并成一个线性表;

(7)复制一个线性表;

(8)逆转一个线性表等。

3.顺序表的插入运算

设长度为n的线性表为

(a1,a2,a3,a4,…,ai, …,an)

现要在线性表的第i个元素ai之前插入一个新元素b,插入后得到长度为n+1的线性表为

(a1,a2,a3,a4,…,aj,aj+1, …,an,an+1)

则插入前后的两线性表中的元素满足如下关系:

a j0

aj= b j=i

a j-1i

在一般情况下,要在第i(1

置,移动结束后,第i个位置就被空出,然后将新元素插入到第i项。插入结束后,线性表的长度增加了1。

4.顺序表的删除运算

在线性表采用顺序存储结构时,如果删除运算在线性表的末尾进行,即删除第n个元素,则不需要移动表中的元素;但如果要删除线性表中的第1个元素,则需要运动表中的所有元素。在一般情况下,如果要删除第i个元素,则原来第i个元素之后的所有元素都必须依次往前移动一个位置。在平均情况下,要在线性表中删除一个元素,其较多的处理时间。

由线性表在顺序存储结构下的插入与删除运算可以看出,线性表的顺序存储结构对于小线性表或者其中元素不常变动的线性表来说是合适的,因为顺序存储的结构比较简单。但这种顺序存储的方式对于元素经常需要变动的大线性表就不太合适,因为插入与删除的效率比较底。

相关文档
最新文档