第二章:线性表

第二章:线性表

一、线性表

1.线性表的定义

线性表—具有相同数据类型的n(n≥0)个数据元素有限序列,其中n为表长,n为0时线性表是一个空表。

2.基本操作

2.1 InitList(&L)

初始化表。构造一个空的线性表L,分配内存空间。

2.2 DestroyList(&L)

销毁操作。销毁线性表,并释放线性表L所占用的内存空间。

2.3 ListInsert(&L,i,e)

插入操作。在表L中的第i个位置上插入指定元素e。

2.4 ListDelete(&L,i,&e)

删除操作。删除表L中第i个位置的元素,并用e返回删除元素的值。

2.5 LocateElem(L,e)

按值查找操作。在表L中查找具有给定关键字值的元素。

2.6 GetElem(L,i)

按位查找操作。获取表L中第i个位置的元素的值。

2.7 其他常用操作

Length(L):求表长。返回线性表L的长度,即L中数据元素的个数。

PrintList(L):输出操作。按前后顺序输出线性表L的所有元素值。

Empty(L):判空操作。若L为空表,则返回true,否则返回false。
从无到有 从有到无

Tips:

①对数据的操作(记忆思路)——创销、增删改查

②C语言函数的定义—— <返回值类型> 函数名(<参数1类型>参数1,<参数2类型>参数2,……)

③实际开发中,可根据实际需求定义其他的基本操作

④函数名和参数的形式、命名都可改变(Reference:严蔚敏版《数据结构》)

⑤什么时候要传入引用“&”——对参数的修改结果需要“带回来”

二、顺序表

1.顺序表的定义

顺序存储的方式实现线性表

顺序存储—把逻辑上相邻的元素存储在物理 位置上也相邻的存储单元中,元素之间的关系由存储单元的邻接关系来体现。

2.顺序表的实现

静态分配 动态分配

//静态分配
typedef struct{
   
    int data[10];  //用静态的数组存放数据元素
    int length;
}SqList;
void InitList(SqList &L){
     //初始化一个顺序表
    for(int i=0;i<10;i++){
   
        L.data[i]=0;
    }
    L.length=0;
}

//动态分配
typedef struct{
   
    int *data;
    int MaxSize;
    int length;
}SeqList;
void IncreaseSize(SeqList &L,int len){
     //增加动态数组的长度
    int *p = L.data;
    //动态申请内存空间
    //malloc函数返回一个指针,需要强制转型为你定义的数据元素类型指针
    //malloc函数头文件<stdlib.h>
    L.data = (int *)malloc((L.Maxsize+len)*sizeof(int));
    for(int i=0;i<L.length;i++){
   
        L.data[i] = p[i];
    }
    L.MaxSize = L.MaxSize+len;
    free(p);
}

3.顺序表的特点

随机访问 ,即可以在O(1)时间内找到第i个元素。

②存储密度高,每个节点只存储数据元素

③拓展容量不方便(即便采用动态分配的方式实现,拓展长度的时间复杂度也比较高)

④插入、删除操作不方便,需要移动大量元素

4.顺序表的基本操作

4.1 插入

ListInsert(&L,i,e)—在表L中的第i个位置上插入指定元素e。

void ListInsert(SqList &L,int i,int e){
   
    for(int j=L.length;j>=i;j--){
   
        L.data[j] = L.data[j-1];
    }
    L.data[i-1] = e;
    L.length++;
}
//时间复杂度:O(n)
4.2 删除

ListDelete(&L,i,&e)—删除表L中第i个位置的元素,并用e返回删除元素的值。

void ListDelete(SqList &L,int i,int &e){
   
	e = L.data[i-1];
	for(int j=i;j<L.length;j++){
   
		L.dara[j-1] = L.data[j];
	}
	L.length--;
}
//时间复杂度:O(n)
4.3 按值查找

LocateElem(L,e)—在表L中查找具有给定关键字值的元素。

//在顺序表L中查找第一个元素值等于e的元素,并返回其位序
int LocateElem(SqList L,int e){
   
    for(int i=0;i<L.length;i++){
   
        if(L.data[i]==e){
   
            return i+
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值