数据结构线性表

一、线性表定义

线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,记作(a1,a2,a3…an)
其中n为表长,当n=0时称为空表
ai-1称为ai的前继节点,ai+1称为ai的后继节点,线性表的第一个节点没有前继节点,最后一个节点没有后继节点
线性表的特点:

  1. 有序性。线性表中相邻的数据元素之间存在这序偶关系
  2. 有穷性。线性表由有限个数据元素组成
  3. 同一性。线性表由相同数据类型组成,每个ai必须属于同一种数据类型

线性表的基本操作

二、创建一个线性表



基本操作:

(1) InitList(&L)。

操作结果:构造-个空的线性表 L。

2) DestroyList(&L)。

初始条件:线性表L已存在。

操作结果:销毁线性表L

(3) ListEmpty(&L)。

初始条件:线性表L已存在。

操作结果:若L为空表,则返回TRUE,否则返回FALSE.

(4) ListLength(&L)。
初始条件:线性表L已存在。

操作结果:返回L中的元素个数。

(5) GetElem(L,e, i)。

初始条件:线性表L已存在,1<=i<=ListLength(L)。

操作结果:用e返回L中第i个数据元素的值。

(6) LocateElem(L, e)。

初始条件:线性表L已存在。

操作结果:返回L中第1个与e相等的元素的位置序号。若此元素不存在,则返回值为0(7) ClearList(&L)。

初始条件:线性表L已存在。

操作结果:将L重置为空表。

(8) ListInsert(&L, i, e)。
初始条件:线性表L已存在,1≤i≤ListLength(L) +1。

操作结果:在L的第i个数据元素之前插入新的元素e, L的长度增1.

(9) ListDelete(&L, i, &e)。

初始条件:线性表L已存在且非空,1≤i<ListLength(L)。

操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1
//构造一个空的线性表
int InitList(seqList *L)
{
    L->data=(Datatype *)malloc(sizeof(Datatype)*LIST_SIZE);
    //malloc:这个函数原意是,在内存开辟一段地址,这段地址的首地址存在返回的那个指针变量里
    if(L->data==null)//判断线性表是否为空
        return -1;
    L->length=0;//清空线性表
    L->listsize=LIST_SIZE;//定义表的长度

    printf("initial finish\n");
    return 0;

}

三、线性表的顺序存储及实现

用c语言定义线性表的顺序结构存储结构

#define MAXSIZE 100
typedef struct{
ElemType data[MAXSIZE];
int length;  //length+1为表长
}SeqList;
//ElemType为了描述的统一而自定义的,属于抽象数据类型
//表名为SeqList
SeqList *L;//定义一个指针L来访问顺序表
//例如要访问一个i元素
L->data[i-1]//访问的是ai,L->length+1为表长

初始化一个顺序表\

SeqList *init_Seqlist(){
SeqList *L;
L=new SeqList;//申请顺序表的存储空间
if(L){
    L->length=-1;
    return L;//申请成功返回顺序表的存储地址
}
else return-1;//不成功返回-1
}

初始化线性表即定义一个空表,先动态分配存储空间,然后把表的length指向-1,length+1=0也就是空表长

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值