数据结构:线性表


一,线性表概述

线性表是最基本、最简单、也是最常用的一种数据结构。线性表(linear list)是数据结构的一种,一个线性表是n个具有相同特性的数据元素的有限序列。
在这里插入图片描述

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

(一)线性表的定义

线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,通常记为:
(a1,a2,… ai-1,ai,ai+1,…an) 其中n为表长, n=0 时称为空表。
在线性表中相邻元素之间存在着顺序关系。对于元素ai 而言,ai-1 称为 ai 的直接前趋,ai+1 称为 ai 的直接后继。即:
(1)有且仅有一个开始结点(a1),它没有直接前趋;
(2)有且仅有一个终端结点(an),它没有直接后继;
(3)除了开始结点和终端结点以外,其余的结点都有且仅有一个直接前驱和一个直接后继。

(二)线性表举例

1,简单的线性表

例如一年12个月:
(1,2,3,4,5,6,7,8,9,10,11,12)
在C或C+ +语言中我们可以把它们定义为数值型。

又例如26个英文字母表:
( a,b,c,d,e,f,g,……,x,y,z)
在C或C+ +语言中我们可以把它们定义为字符型。

2,复杂的线性表

例如我们曾经在绪论中引用的一个学生入学情况表(表2-1)可以是用户自定义的学生类型(如C语言中的结构体或数据库管理系统中的记录)。

由于表格中各记录之间存在“一对一”的关系,所以它也是一种线性表。

(三)线性表的二元组表示

Linearity =(D,R)
数据对象:D={ai ∣ 1<=i<=n n>=0}
数据关系:{< ai-1,ai > ∣ 2<=i<=n} ai-1, ai∈D
关系中< ai-1, ai >是一个序偶的集合,它表示线性表中数据元素的相邻关系,即 ai-1领先ai ,ai领先 ai+1。

(四)线性表抽象数据类型描述及定义

线性表的抽象数据类型主要包括两个方面:数据集合和该数据集合上的操作集合。线性表的常见操作有插入、删除、查找、获取元素值、设置元素值等,在java语言中,抽象数据类型通常设置成接口。线性表抽象数据类型的java接口声明如下:

package net.army.dataproject.day03;

/**
 * 作者:梁辰兴
 * 日期:2023/3/14
 * 功能:线性表接口
 */
public interface LinearList<T> {
    public T get(int i);
    public void set(int i, T t);
    public int insert(T t);
    public int insert(int i, T t);
    public T remove(int i);
    public boolean contains(T key);
    public int indexOf(T key);
    public int size();
    public void clear();
    public boolean isEmpty();
    public void printList();
}

其实,java语言中的 java.util 包中的 List 接口就是线性表,它的实现子类 ArrayList 就是顺序表,LinkedList 就是链表。

二,线性表的基本操作

线性表上的基本操作有:

(一) 创建线性表:CreateList()

初始条件:表不存在。
操作结果:构造一个空的线性表。

(二)求线性表的长度:itt LengthList(L)

初始条件:表L存在。
操作结果:返回线性表中的所含元素的个数。

(三)按值查找:SearchList(L,x),x是给定的一个数据元素。

初始条件:线性表L存在
操作结果:在表L中查找值为x的数据元素,其结果返回在L中首次出现的值为x的那个元素的序号或地址,称为查找成功; 否则,在L中未找到值为x的数据元素,返回一个特殊值表示查找失败。

(四)插入操作:InsertList(L,i,x)

初始条件:线性表L存在,插入位置正确 (1<=i<=n+1,n为插入前的表长)。
操作结果:在线性表L的第 i 个位置上插入一个值为 x 的新元素,这样使原序号为 i , i+1, … , n 的数据元素的序号变为 i+1,i+2, … , n+1,插入后表长=原表长+1。

(五)删除操作:DeleteList(L,i)

初始条件:线性表L存在,1<=i<=n。
操作结果:在线性表L中删除序号为i的数据元素,删除后使序号为 i+1, i+2,…, n 的元素变为序号为 i, i+1,…,n-1,新表长=原表长-1。

(六)显示操作:ShowList(L)

初始条件:线性表L存在,且非空。
操作结果:显示线性表L中的所有元素。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在 C 语言中构建一个线性表,有几种常见的方法。 一种方法是使用数组,将线性表中的元素存储在数组中。这种方法的优点是简单易实现,但是缺点是线性表的大小固定,不能动态增长。 另一种方法是使用链表,在每个线性表元素的内存空间中存储下一个元素的地址。这种方法的优点是线性表可以动态增长,缺点是实现较为复杂,需要额外的内存空间来存储指针。 线性表还有许多其他的实现方法,如数组队列、双端队列、双向链表等。根据实际需要选择适当的实现方法即可。 ### 回答2: 在C语言中,可以使用数组或链表来构建线性表。 1. 使用数组构建线性表: 首先,定义一个数组来表示线性表,数组的长度等于线性表的容量。然后,定义一个变量用于表示线性表的当前长度。插入元素时,将元素插入到数组的末尾,并将当前长度加1。删除元素时,将需要删除的元素后面的元素依次往前移动,并将当前长度减1。根据元素的索引位置,可以直接访问数组中的元素。 2. 使用链表构建线性表: 首先,定义一个结构体来表示链表的一个节点,包含数据域和指向下一个节点的指针。然后,定义一个指向链表头节点的指针,并将其初始化为NULL。插入元素时,创建一个新节点并赋值,将新节点插入到链表的适当位置,并更新前后节点的指针。删除元素时,找到需要删除的节点,并更新前后节点的指针,释放删除节点的内存空间。 无论是使用数组还是链表构建线性表,都需要设置一些额外的操作,如初始化、获取长度、获取元素等。同时,需要实现操作的函数或方法,以便使用者可以方便地对线性表进行增、删、改、查等操作。 ### 回答3: 要用C语言构建一个线性表,可以使用数组或指针来实现。 方法一:使用数组构建线性表 1. 首先定义一个固定大小的数组,作为线性表的存储空间。 2. 定义一个变量作为线性表的长度,初始化为0。 3. 可以使用以下函数来操作线性表: - 插入元素:判断线性表是否已满,如果未满,则将要插入的元素放入数组末尾,长度自增。 - 删除元素:判断线性表是否为空,如果不为空,则将要删除的元素移至数组末尾,并将长度自减。 - 遍历线性表:使用循环语句遍历数组,逐个输出元素。 方法二:使用指针构建线性表 1. 首先定义一个结构体,包含两个成员:数据和指向下一个元素的指针。 2. 定义一个指针作为线性表的头指针,指向链表的第一个元素。 3. 可以使用以下函数来操作线性表: - 插入元素:创建一个新的节点,将要插入的元素赋值给节点的数据成员,将新节点的指针指向原头指针所指节点,将头指针指向新节点。 - 删除元素:使用循环遍历链表,找到要删除的节点的前一个节点,将前一个节点的指针指向要删除节点的下一个节点。 - 遍历线性表:使用循环语句遍历链表,逐个输出元素。 不管是使用数组还是指针构建线性表,都需要注意内存管理和边界条件的判断,确保线性表的正常运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

梁辰兴

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

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

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

打赏作者

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

抵扣说明:

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

余额充值