一、线性表的定义:多个相同数据类型元的素有限序列。
首先是一个序列,元素之间有先后顺序,当有多个元素的时候,第一个元素没有先驱元素但有后继元素,最后一个元素没有后继元素但有先驱元素,其他元素都是有先驱和后继元素,且满足只有一个先驱和一个后继元素。当元素个数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) 按内容返回对应的下标