数据结构:线性表
创始人
2025-05-31 15:38:56
0

文章目录

  • 一,线性表概述
    • (一)线性表的定义
    • (二)线性表举例
      • 1,简单的线性表
      • 2,复杂的线性表
    • (三)线性表的二元组表示
    • (四)线性表抽象数据类型描述及定义
  • 二,线性表的基本操作
    • (一) 创建线性表:CreateList()
    • (二)求线性表的长度:itt LengthList(L)
    • (三)按值查找:SearchList(L,x),x是给定的一个数据元素。
    • (四)插入操作:InsertList(L,i,x)
    • (五)删除操作:DeleteList(L,i)
    • (六)显示操作:ShowList(L)


一,线性表概述

线性表是最基本、最简单、也是最常用的一种数据结构。线性表(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 {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中的所有元素。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...