数据结构之——线性表

本文介绍了线性表的特征和两种常见实现:顺序表和单链表。顺序表允许随机访问,存储密度高,插入删除操作需要移动元素。单链表通过头结点简化操作,插入和删除只需改变相邻结点的指针。内容包括各种基本操作的描述和实现策略。
摘要由CSDN通过智能技术生成

1.线性表定义


线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长,当n为0时,该线性表是一个空表。除第一个元素外,每个元素有且仅有一个直接前驱,除最后一个元素外,每个元素有且仅有一个直接后继。

线性表的特点:
1.表中元素的个数有限
2.表中元素具有逻辑上的顺序性,在序列中各元素排序有其先后次序
3.表中元素都是数据元素,每一个元素都是单个元素
4.表中元素的数据类型都相同,这意味着每一个元素都占有相同大小的存储空间
5.表中元素具有抽象性,即仅讨论元素间的逻辑关系,不考虑元素究竟表示什么内容

知识框架:
在这里插入图片描述

2.顺序表


线性表的顺序存储成为顺序表,它是用一组地址连续的存储单元,依次存储线性表中的数据元素,从而使得逻辑上相邻的两个元素在物理位置上也相邻。

顺序表的特点:
1.可以随机访问,即通过首地址和元素符号可以在O(1)的时间内找到指定的元素。
2.表中元素的逻辑顺序与其物理顺序相同。
3.存储密度高,每个结点只存储数据元素。

注意:线性表中元素的位序是从1开始,而数组中元素的下标 是从0开始。
线性表的顺序存储类型描述为:

#define MaxSize  50  //定义线性表的最大长度
typedef struct{
   
 int data[MaxSize];  //线性表的元素
 int length;       //线性表的当前长度
}SqList;    //线性表的类型定义

顺序表的基本操作如下:
(1)插入操作
在顺序表L的第i(1<=i<=L.length+1)个位置插入新元素e。如果i的输入不合法,则返回false,表示插入失败;否则将顺序表的第i个元素及其后的所有元素右移一个位置,腾出一个空位置插入新元素e,顺序表长度加1,插入成功,返回true。

bool ListInsert(SqList &L, int i, int e ){
   
 if(i<1 || i>L.length +1)    return false;  //判断i的范围是否有效
 if(L.length >= MaxSize)  return false;  //当前存储空间已满,不能插入
 
 for(int j = L.length ; j>=i; j--){
   
  L.data[j] = L.data[j-1];  //将第i个元素及之后的元素后移
 }
 L.data[i-1] = e;  //在位置i处加入e
 L.length ++;  //线性表长度加1
 retur true;
}

(2)删

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值