数据结构之线性表

本文介绍了线性表的基本定义和两种主要的存储结构——顺序存储和链式存储,详细阐述了各自的特点。顺序存储允许随机访问但插入和删除操作较慢,而链式存储通过指针链接元素,插入和删除相对高效。此外,文章还提供了C语言实现的线性表基本操作,包括初始化、添加、插入和删除元素的函数示例。
摘要由CSDN通过智能技术生成

1线性表的基本定义
线性表是 n 个元素构成的有限序列,可以表示为{a1,a2,… an }
2线性表的存储结构(重点)线性表存储结构分为顺序存储和链式存储
2.1顺序存储线性表的顺序存储是指同一地址连续存储单元依次存储线性表,从而使得两个相邻元素在物理位置上相邻.通过物理结构表示元素的逻辑结构.线性表中某个元素的存储位置为: LOC ( ai )= LOC (a1)+( i -1) d 其中 LOC (a1)是第一个元素的存储位置, d 表示某个元素所占存储单元的个数.顺序存储优点是可以随机取出元素,而且速度快,缺点是删除和插入元素需要移动元素.线性表使用顺序存储插入一个新元素,需要平均移动 n /2个元素;删除一个元素,需要平均移动n(/n-1)/2
2.2链式存储使用链式存储,数据元素是用结点来存储,链表中结点的基本结构为:数据域 指针域数据域:用来存储数据结构的值.指针域:用来存储当前元素的直接前驱或直接后续的位置信息,里面信息是个指针或者叫做链.
3.线性表的操作(c语言)基本操作
#include
#define MAXSIZE 100
typedef char ElemType;
typedef struct
{
ElemType elem[MAXSIZE];
int length;
}
SqList L;//初始化线性表
void InitList_Sq(SqList * L)
{
L->length = 0;
//初始化线性表的长度为 0
}
//添加数据
void ListAdd_Sq(SqList * L,ElemType e)
{int n = L->length;//长度赋值给 n
L->elem[n] = e;//需要添加的数据元素, 放入数组的最后一个位置
++L->length;
//添加数据元素后, 线性表的数据长度自增 1}
//插入数据int ListInsert_Sq(SqList * L,int i,ElemType e){
int j;if(i<1 || i>L->length+1)
//判断是否在数据范围内
return 0;
if(L->length == MAXSIZE)
//如果长度达到 MAXSIZE, 则无法继续插入数据
return 0;
for(j=L->length-1; j>=i-1; j–)
//从最后一个数据元素开始, 依次向后移动, 形成新的线性表
{
L->elem[j+1] = L->elem[j];}L->elem[i-1] = e;
//将需要插入的数据元素 e 插入到第 i 的位置++L->length;//添加数据元素后, 线性表的数据长度自增 1return 1;}
//删除数据
int ListDelete_Sq(SqList * L, int i, ElemType * e)
{int j;if((i<1) || (i>L->length))//判断需要删除的数据元素的位置是不是在线性表中
return 0;
*e = L->elem[i-1];//将需要删除的数据元素存入变量 e 中
for(j=i; j<=L->length-1; j++)//从第 i 个开始到最后一个结束依次向前移动
{L->elem[j-1] = L->elem[j];}
–L->length;//删除数据元素后, 线性表的数据长度自减 1
return 1;}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值