学习数据结构:线性表的顺序存储结构

一、线性表的定义:多个相同数据类型元的素有限序列。
首先是一个序列,元素之间有先后顺序,当有多个元素的时候,第一个元素没有先驱元素但有后继元素,最后一个元素没有后继元素但有先驱元素,其他元素都是有先驱和后继元素,且满足只有一个先驱和一个后继元素。当元素个数n=0时,为空表。用一段地址连续的存储单元依次存储线性表的数据元素

二、线性表的顺序存储结构
1.线性表结构体定义

#DEFINE MAXSIZE 100
typedef struct
{
	int data[MAXSIZE];		//MAXSIZE数组存储元素的最大个数,
	int length;             //当前表的长度
}SqList;

线性表的长度根据插入删除的元素的量而改变,应该小于等于数组的长度。
2.初始化线性表

void InitList(SqList *L)
{	
	L->=length=0;
}

3.按序号查找获得元素
先判断查询的序号是否合法,在判断线性表是否为空。


int GetElemType(SqList L,int i,int *e)
//SqList是定义的线性表的结构体变量
{
	if(i<1 || i>L.length || L.length==0)
	//判断查询的位置i是否合法,以及线性表是否为空
		return 0;
	*e=L.data[i-1];
	return 1;
}

4.按内容返回相对应的序号

int LoctaeList(SqList L,int e)
{
	int i;        //定义一个计数器
	for(i=0;i<L.length-1;i++) 
		if(L.data[i]==e)
			return i;
	return 0;
}

5.插入元素
(1)首先判断线性表是否满了;
(2)再判断要插入的位置是否合法,即是否在线性表的可插入的长度范围内;
(3)判断i的位置是否位于L->length+1,是则从(5)开始执行,否则从(4)开示执行
(4)从最后一个元素的位置开始遍历,每一次遍历都把当前元素的位置往后移动一位
(5)把数据e传递给第i个位置
(6)线性表长度加1

int ListInsert(SqList *L,int i,int e)
{
    int k;
	if(i<1 || i>L->length+1 || L->length==MAXSIZE)
	{//判断插入的位置是否合法,以及判断线性表是否满了
		return 0;
	}
	if(i<=L->length)//如果要插入的位置不在表的尾部
	{
		for(k=length-1;k>=i-1;k--)  //从后往前开始遍历,直到位置i为止
			L->data[k+1]=L->data[k];//每一次遍历,都把当前元素的位置往后挪动一位
	}
	L->data[i-1]=e;   //把数据e传递到第i个位置
	L->length++;      //线性表长度加1
	return 1;
}

6.删除元素
(1)首先判断线性表是否为空;
(2)再判断要删除的位置是否合法,即是否在线性表的长度范围内;
(3)把要删除位置的数据传递给e;
(4)判断要删除的位置是否是最后一位元素,是则直接执行操作(6),否则执行(5)
(5)从要插入的位置之后的一位元素开始遍历,每一次遍历都把当前元素的位置往)前移动一位
(6)线性表长度减1

Status ListDelete(SqList *L,int i;int *e)
{
	int k;
	if(i<1 || i>L.length || L.length == 0)
	{//判断要删除的位置是否合法,以及判断线性表是否为空
		return 0;
	}
	*e=L->data[i-1];//把i位置的数据传递给e
	if(i<L->length)
	{
		for(k=i;k<=L->length-1;k++) //从i的位置开始往后遍历,直到尾部为止
			L->data[k-1]=L->data[k];//每一次遍历,都把当前元素的位置往前挪动一位
	}
	L->length--;  //线性表长度减1
	return 1;
}

7.返回顺序表的长度

int LenLsit(SqList L)
{	
	return L.length;
}

8.清空顺序表

void ClearList(SqList *L)
{
	L->length==0;
}

时间复杂度为O(1)
void ClearList(SqList *L) 清空顺序表
int LenList(SqList L) 返回顺序表的长度
int GetElemType(SqList L,int i,int *e) 按下标返回对应的内容
void EmptyList(SqList *L) 判断顺序表是否为空
int InitList(SqList *L) 初始化顺序表
时间复杂度为O(n)
int DeleteList(SqList *L,int i,int *e) 删除指定位置的元素
int InsertList(SqList *L,int i,int e) 向指定位置插入元素
int LocateElemType(SqList L,int e) 按内容返回对应的下标

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值