【数据结构】4.常用算法(1顺序表)(共5篇)

本文详细介绍了线性表的概念,特别是顺序表的特点,包括如何在C语言中实现顺序表的初始化、长度计算、取值、插入、删除和查找操作,以及它们的时间复杂度。此外,还讨论了顺序表的存储结构和使用动态分配的一维数组表示线性表的方法。
摘要由CSDN通过智能技术生成

线性表的特点:

  1. 存在唯一的一个被称作 “第一个”的数据元素
  2. 存在唯一的一个被称作 “最后一个”的数据元素
  3. 除第一个元素外,结构中的每个元素均只有一个前驱
  4. 除最后一个元素外,结构中的每个元素只有一个后继

线性表的基本运算:

InitList(&L);   初始化:构造一个空的线性表L

ListLength(L);   求表长:返回L中数据元素的个数

GetElem(L,i,&e);   用e返回L中第i个元素的值 (前提是i在表的长度内:1<= i <= Listlength(L) )

LocateElem(L,e);   返回在L中第一个与e相同的元素在L的位置,若不存在,返回0

ListInsert(&L,i,e);   在L中第i个元素之前插入新的元素e,L 的长度+1

ListDelete(&L,i);   删除L中第i个元素,L的长度-1


顺序表定义:

顺序表是在计算机内存中以数组的形式保存的线性表

(通常顺序存储结构的线性表  称为 顺序表

顺序表的特点:逻辑相邻的数据元素,其物理次序也是相邻的。

【线性表:只要确定了存储线性表的起始位置,线性表中的任一数据元素都可以随机存取,所以线性表的顺序存储结构是一种随机存取的存储结构。】

地址的计算方法:

假设线性表的每个元素需占用 x 个存储单元,并以所占的第一个单元的存储地址作为数据元素的存储的起始位置。

则线性表中第 i + 1 个数据元素的存储位置和第 i 个的位置相差 x 个存储单元。

线性表的第 i 个数据元素的存储位置为:起始位置 + (i-1)x

线性表的第一个数据元素的存储地址位置,通常称为线性表的起始位置或基地址。每一个数据元素的存储位置都和线性表的起始位置相差一个常数。

顺序表类型定义:

由于高级语言中的数组类型也有随机存取的特性,通常都用数组来描述数据结构中的顺序存储结构。

在此,由于线性表的长度可变,且所需最大存储空间问题不同而不同,则在C语言中可用动态分配的一维数组表示线性表。

//顺序表的存储结构

#define MAXSIZE 100        //顺序表可能达到的最大长度

//C语言结构体

typedef struct {
    ElwmType * elem;       //存储空间的基地址
    int length;           //当前长度
}SqList;                  //顺序表的结构类型为 SqList

1)元素类型定义中的ElemType数据类型是为了描述统一而自定的,在实际应用中,用户可根据实际需要具体定义表中数据元素的数据类型,既可以是基本数据类型,如int,float,char等,也可以是构造数据类型,如struct结构体类型。

2)length 表示顺序表中当前数据元素的个数。因为C语言数组的下标是从0开始的,而位置序号是从1开始的,所以要注意区分元素的位置序号和该元素在数组中下标位置之间啊的对应关系,而数据元素依次存放在数组中。

顺序表的1创建算法,2插入算法、3删除算法、4查找算法、5求线性表长度算法等;

题型:【阅读填空题 】【分析应用题】【编程设计题】

1创建算法

初始化:

顺序表的初始化操作就是构造一个空的顺序表。

步骤:

1.为顺序表动态分配一个预定义大小的数组空间,使elem指向这段空间的基地址。

2.将当前表的长度设为0。

#define MAXSIZE 100

Status InitList(SqList &L) {
//构造一个空的顺序表L
L.elem = new ElemType[MAXSIZE];    //为顺序表分配一个大小为MAXSIZE的数组空间

//(!逻辑非,取反的作用,当L.elem为空,值就是0,加上‘!’就是非0,运行if里面的代码)
if(!L.elem){        //当顺序表为空时   
     exit(OVERFLOW);        //存储分配失败退出
}

L.length = 0;        //空表长度为0
return OK;
}

取值:

根据指定的位置序号取值,可以直接通过数组下标定位得到。

第 i 的元素的位置,数组下标是 i-1 。

步骤:

1.判断位置序号 i ,是否合理(1<=i<=L.length,这只是我们分析时的写法,代码里面不能这样写判断),若不合理,则返回ERROR。

2.若 i 值合理,则将第 i 个元素 L.elem[i-1] 赋值给参数e,通过e返回第i个数据元素的传值。

Status GetElem(SqlList L ,int i , ElemType &e){
    if(i<1||i>L.length) return ERROR;  //判断 i 是否合理,不合理就返回ERROR
    e = L.elem[i-1];
    return OK;
}

顺序表取值算法的时间复杂度为 O(1)。

2插入算法

3删除算法

4查找算法

5求线性表长度算法

阅读填空题

分析应用题

编程设计题

参考书籍:

云南专升本数据结构——东北师范大学-库课

数据结构(C语言版)——清华大学出版社

参考链接:

顺序表_百度百科 (baidu.com)

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值