【数据结构】1.线性结构:线性表

本文介绍了线性表的概念,包括它的抽象数据类型描述和存储结构,如顺序存储和链表存储。此外,还详细探讨了广义表,解释了其性质、表示和实现,特别是链表存储在广义表中的应用。
摘要由CSDN通过智能技术生成

一、什么是线性表?

线性表(Linear List)是一种由同类型数据元素构成的有序序列的线性结构。
表中元素个数称为长度;无元素时称为空表;表的起始位置为表头,结束位置为表尾。

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

类型名称:线性表(List)
数据对象集:线性表是n个元素构成的有序序列(a1,a2,a3,…,an)
操作集:线性表L,整数i表示位置,元素X是一个ElementType的数据类型,ElementType可以是整型,可以是结构等。
1.List MakeEmpty(); 初始化空线性表L
2.ElementType FIndKth(int K, LIst L); 返回位序为K的元素
3.int FInd(ElementType X, LIst L); 在线性表中查找X的第一次出现位置
4.void Insert(ElementType X, int i, LIst L); 在位序i前插入一个元素X
5.void Delete(int i, LIst L); 删除线性表中位序为i的元素
6.int Length(List L) 返回线性表L长度n

三、线性表的存储结构

对于一种数据结构有不同的表示方法(存储方法),一般在数据结构中最常见的两种存储方法:数组和链表

1.顺序存储全部信息

数组顺序存放线性表的各个元素,就是用一组地址连续的存储单元依次存储线性表的数据元素,这种存储结构的线性表也称为顺序表。这样的存储方法,数据在逻辑上和物理(内存)上都是相邻的。
在这里插入图片描述
1)存储实现方法:

typedef struct LNode *List;
struct LNode{
    
    ElementType Data[MAXSIZE]; 
    int Last;
}; 
struct LNode L;
List PtrL;

访问下标为i的元素:L.Data[i]PtrL->Data[i]
访问线性表的长度:L.Last+1PtrL->Last+1
下面这样也可以,其实是一样的,但是涉及到结构体定义和初始化时的一些区别。

typedef struct
{
   
    ElementType *elem;   //储存空间的基地址
    int length;      //数据结构的长度
}LNode;

下面的操作都做了测试,测试中存的int型,可以是任意的ElementType类型。
2)初始化:

List MakeEmptyList(){
   
    List PtrL;
    PtrL = (List)malloc(sizeof(LNode));
    PtrL->Last = -1;
    return PtrL;
}

3)查找:

int Find(int X, List PtrL){
   
    int i = 0;
    for (i = 0; i < PtrL->Last + 1; i++){
   
        if (PtrL->Data[i]==X)
            break;
    }
    return i;
}

4)插入:

void Insert(int X,int i,List PtrL){
   
    int j;
    if (PtrL->Last + 1 == MAXSIZE){
   
        cout << "List full!" << endl; /* 表空间已满,不能插入*/
        return;
    }
    if (i < 1 || i > PtrL->Last+2){
    /*检查插入位置的合法性*/
        cout << "Illegal location!" << endl;
        return;
    }
    for (j =
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值