数据结构第2章1

发布时间:2021-06-12

线性结构的定义:若结构是非空有限集,则有且仅有一个开始结点和一个 终端结点,并且所有结点都最多只有一个直接前趋和一个直 接后继。 →可表示为:(a1 , a2 , ……, an) 特点① 只有一个首结点和尾结点; 特点② 除首尾结点外,其他结点只有一个直接前驱和一个 直接后继。 简言之,线性结构反映结点间的逻辑关系是 一对一 (1:1) 的。

线性结构包括:线性表、堆栈、队列、字符串、数组 等,其中最典型、最常用的是------ 线性表1

第2章 线性表2.1 线性表的基本概念 2.2 线性表的顺序表示和实现 2.3 线性表的链式表示和实现 2.4 应用举例

2.1 线性表的基本概念1、线性表 它是一种最简单的线性结构。是一种可以在任 意位置进行插入和删除数据元素操作的,由n(n≥0) 个相同类型数据元素a0, a1, … , an-1组成的线性结 构。

线性表的逻辑结构:

(a0, a1, … ai-1,ai, ai+1 ,…, an-1)数据元素线性起点

ai的直接前趋 ai的直接后继

线性终点

下标,是元素的 序号,表示元素 在表中的位置

n=0时称为

空表

n为元素总个数,即表 长。n≥0

例1 分析26 个英文字母组成的英文表是什么结构。( A, B, C, D, …… , Z) 分析: 数据元素都是同类型(字母), 元素间关系是线性的。

例2 分析学生情况登记表是什么结构。学号 姓名 性别 年龄 班级

012003010622012003010704 012003010813 012003010906 012003011018 :

陈建武赵玉凤 王 泽 薛 荃 王 春 :

男女 男 男 男 :

1918 19 19 19 :

2003级电信0301班2003级电信0302班 2003级电信0303班 2003级电信0304班 2003级电信0305班 :

分析:数据元素都是同类型(记录),元素间关系是线性的。 注意:同一线性表中的元素必定具有相同特性 !5

2、线性表抽象数据类型它包括两个方面: 数据集合:{ a0, a1, … , an-1 } ai的数据类型为 DataType 操作集合:(1)ListInitiate(L) 初始化线性表 (2)ListInsert(L,i,x) 插入数据元素 (3)ListLength(L) 求当前数据元素个数 (4)ListDelete(L,i,x) 删除数据元素 (5)ListGet(L,i,x) 取数据元素 等6

3、线性表的存储结构(1)顺序存储结构:它是使用一片地址连续的有限内存单

元空间存储数据元素的一种计算机存储数据方法。 特点:(任意两个在逻辑上相邻的数据元素在物理位置 上也必然相邻)逻辑上相邻的元素,物理上也相邻。 (2)链式存储结构:它是把数据元素和指针定义成一个 存储体,使用指针把发生联系的数据元素链接起来 的一种计算机存储数据方法。 特点:任意两个在逻辑上相邻的数据元素在物理上不 一定相邻,数据元素的逻辑次序是通过链中的指针 链接实现的。

2.2 线性表的顺序表示和实现一

、顺序表的存储结构 二、 顺序表的实现

三、 顺序表的运算效率分析

一、 顺序表的存储结构表示 可以利用数组V[n]来实现

1、顺序表:用一组地址连续的存储单元依次存储线性表的各个数据元素。即采用顺序存储结构的线性 表。它通常采用静态数组实现数据元素的存储。

注意:在C语言中数组的下标是从0开始,即: V[n]的有效范围是从 V[0]~V[n-1]9

2、线性表顺序存储特点:

(1) 逻辑上相邻的数据元素,其物理上也相邻; (2) 若已知表中首元素在存储器中的位置,则其他元 素存放位置亦可求出(利用数组V[n]的下标)。 设首元素a0的存放地址为LOC(a0)(称为首地址), 设每个元素占用存储空间(地址长度)为L字节, 则表中任一数据元素的存放地址为: LOC ( ai+1 ) = LOC( ai ) + L LOC ( ai ) = LOC( a0 ) + L *i 对上述公式的解释如图所示10

3、线性表的顺序存储结构示意图地址 b=LOC(a0) 内容 a0 a1 …… ai ai+1 …… 元素在表中的位序

L

0 1 i i+1

b+ Lb +iL

b +(n-1)Lb +(MaxSize-1)L

an-1

n-1空闲区

LOC ( ai ) = LOC( a0 ) + L *i11

4、用C语言描述 typedef struct { DateType list[MaxSize]; int size; }SeqList;/* MaxSize表示数组的最大元素个数,list表示顺序表 的数组名,size表示顺序表中当前存储的数据元素个 数,它必须满足size≤ MaxSize,SeqList是该结构体 的名字。*/12

例1

设有一维数组M,下标的范围是0到9,

每个数组元素用相邻的5个字节存储。存储器

按字节编址,设存储数组元素M[0]的第一个字节的地址是98,则M[3]的第一个字节的

地址是多少?解:已知地址计算通式为: LOC(ai) = LOC(a0) + L *i LOC( M[3] ) = 98 + 5 ×3 =113

113

例2 用数组V来存放26个英文字母组成的线性表

(a,b,c,…,z),写出在顺序结构上生成和 显示该表的C语言程序。 char V[30]; void build() /*字母线性表的生成,即建表操作 */ { int i; 核心语句: V[0]='a'; 方法1 V[i]= V[i-1]+1; for( i=1; i<=n-1; i++ ) 方法2 V[i]=’a’+i; V[i]=V[i-1]+1; 方法3 V[i]=97+i; }14

void display( ) /*字母线性表的显示,即读表操作*/ { int i; for( i=0; i<=n-1; i++ ) printf( "%c", v[i] ); printf( "\n " ); } void main(void) /*主函数,字母线性表的生成和输出*/ { n=26; /* n是表长,是数据元素的个数,而不是V的实际下标*/

build( ); display( ); }执行结果: a b c d e f g h i j k l m n o p q r s t u v w x y z15

二、 顺序表的实现(或操作) 数据结构的基本运算: 修改、插入、删除、查找、排序 1) 修改 通过数组的下标便可访问某个特定元素并 修改之。 核心语句: V[i]=x;

显然,顺序表修改操作的时间效率是 O(1)

2)插入 在线性表(n个元素)的第i个位置前插入一个元素实现步骤:

将第n至第i 位的元素向后移动一个位置; 将要插入的元素写到第i个位置; 表长加1。 注意:事先应判断: 插入位置i 是否合法?表是否已满?

for (j=n-1; j>=i; j--) 核 // 元素后移一个位置 心 a[j+1]=a[ j ]; // 插入x 语 a[ i ]=x; 句: // 表长加1 n++;17

在线性表的第i个位置前插入一个元素的示意图如下:1 2 3 4 插入25 5 12 1

1213 21

1321 24 28 30 42 77

23 4 5 6 7 8

2425

67 8

2830 42 77

9

3)删除 删除线性表的第i个位置上的元素实现步骤: 将第i+1 至第n 位的元素向前移动一个位置; 表长减1。 注意:事先需要判断,删除位置i 是否合法? 核心语句: for ( j=i+1; j<=n-1; j++ )

a[j-1]=a[j];

// 元素前移一个位置 // 表长减1

n--;

删除顺序表中某个指定的元素的示意图如下:1 2 3 4 5 6 7 8 12 13 21 24 25 28 1 2 3 4 5 6 7 8 12 13 21 24 28 30 42 77

3042 77

9

例:建立一个线性表,先依次输入数据元素1,2, 3,4,…,10,然后删除5,最后依次显示当前 线性表中的数据元素。假设该线性的数据元素个 数最坏情况下不会超过100个。 实现方法: 1、采用直接编写一个主函数实现。 2、利用已设计实现的抽象数据类型模块。(存 放在头文件名为SeqList.h中,通过 #include “SeqList.h” )

数据结构第2章1.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219