数据结构与算法系列--线性表

本文详细介绍了线性表的基本概念、抽象数据类型、顺序存储结构和链式存储结构,包括线性表的定义、数学表达式、顺序存储的插入与删除操作以及链表的结点结构和单链表的读取、插入和删除算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、线性表的基本概念

1.线性表的定义:由零个或多个数据元素所组成的有限序列。

[注意]

  • 线性表是一个序列,这就要求其中的元素必须是有顺序的,类似于低年级小学生排队放学一样。同时,除了第一个元素和最后一个元素以外,线性表中每一个元素前面和后面只能有一个元素与其对应。
  • 线性表是有限的。

2.线性表的数学表达式

\left (a _{1},a_{2} ,...a_{i-1},a_{i},a_{i+1},...a_{n}\right )

[注意]

  • 线性表中元素的下标表示元素的序号,也即元素在表中的位置。
  • a_{i}为线性表中其中一个数据元素,则我们将元素a_{i-1}称为元素a_{i}的直接前趋,元素a_{i+1}称为元素a_{i}的直接后继。
  • 一般的,除了线性表中第一个和最后一个数据元素外,其余的数据元素只能有一个直接前趋和一个直接后继。
  • n=0时习惯将其称为空表。

3.线性表的例子

【例1】26个英文字母组成的英文表(A,B,C,D,...,Z),该表中所有的数据元素都是字母,元素关系之间都为线性。

【例2】学生基本情况表

学号 姓名 性别 出生年月 家庭地址
1 张三 2001.6 北大街18号
2 李四 2002.6 新城区甲楼大院
3 王五 2001.9 南大道789号
... ... ... ... ...

 【例3】某学生历次化学考试成绩:(98,99,92,96,95.......)

二、线性表的抽象数据类型

1.定义形式

ADT List{

        数据对象: D={ a_{i}|a_{i}属于ELEMSET,(i=1,2,...,n),n>=0}

        数据关系: R={ <a_{i-1},a_{i}>|a_{i-1},a_{i}\epsilon D,(i=2,3....n)

        基本操作:

        InitList(*L):初始化操作,建立一个空的线性表L。

        ListEmpty(L):若线性表为空,返回TRUE,否则返回FALSE。

        ClearList(*L):将线性表清空重置为空表。

        GetElem(L,i,*e):将线性表中的第i个元素值返回给e。

        LocateElem(L,e):将线性表L中查找与给定值相等的元素,如果查找成功,则返回相应元素值在表中的序号,否则返回0.

        ListInsert(*L,i,e):在线性表L中的第i个位置插入新元素e。

        ListDelete(*L,i,*e):删除线性表中第i个位置元素,并用e返回其值。

        ListLength(L):返回线性表L的元素个数。

}

endADT

例 将所有的线性表Lb中存在但不在La中存在的数据元素插入到La中

void unionL(SqList *La,SqList Lb)
{
    int La_len,Lb_len,i;
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农区

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值