数据结构:顺序表

1 顺序表的定义
静态分配:

#define MaxSize 100线性表最大长度
//数组静态分配
typedef struct
{
	ElemType data[MaxSize];//ElemType为数量类型,可根据实际替换成想要的数据类型,如int
	int length;//当前长度
}SqList;

动态分配:

//数组动态分配
#define MaxSize 100线性表最大长度
#define InitSize 100//线性表初始分配量
typedef struct
{
	ElemType *data
	int MaxSize,length;//最大容量和当前个数
}SqList;

如果是复杂类型,可以先将数据类型定义好:

//线性表P=((p1,e1),(p2,e2),,,(pm,em))
typedef struct//多项式非零项
{
	float p;//系数
	int e;//指数
}Polynomail;
//数组动态分配
typedef struct
{
	Polynomail* elem;//存储空间基地址
	int length;//多项式中当前项个数
}SqList;//多项式中的 顺序存储结构类型 SqList
SqList L;
L.data = new Polynomail[InitSize];//记得要手动释放

maxsize为最大长度,length记录当前长度
在这里插入图片描述
在这里插入图片描述
补充一下简单操作:
初始化:

Status Init_Sq(SqList& L)//Status为函数返回值类型
{
	L.data = new ElemType[MaxSize];//分配空间
	if (!L.data)exit(OVERFLOW);//分配失败,返回溢出
	L.length = 0;//当前长度
	return OK;
}

销毁:

void Destory(SqList& L)
{
	if (L.data)delete L.data;//释放存储空间
}

清空:

void Clear(SqList& L)
{
	L.length = 0;//将线性表长度置为0
}

返回线性表长度:

int GetLength(SqList& L)
{
	return(L.length);
}

判断线性表是否为空

int IsEmpty(SqList& L)
{
	if (L.length == 0)return 1;
	else
	{
		return 0;
	}
}

基本操作:
1 顺序表的取值(根据位置i获取相应位置元素的内容)
随机存取,时间复杂度为O(1)

int GetElem(SqList L, int i, ElemType& e)
{
	if (i < 1 || i > L.length)//判断i值是否合理
		return ERROR;
	e = L.data[i - 1];//下标
	return OK;
}

2 按值查找(顺序查找)
在顺序表L中查找第一个元素值等于e的元素,并返回其位置

int LocateElem(SqList L, ElemType e)
{
	for (int i = 0; i < L.length; i++)
	{
		if (L.data[i] == e)
		{
			return i + 1;//查找成功,返回序号
		}
	}
	return 0;
}

3 顺序表的插入


bool ListInsert(SqList& L, int i, ElemType e)
{
	if (i<1 || i>L.length+1)//判断i的范围是否有效,这里用>而不是>=是因为尾部也可以插入
	{
		return false;
	}
	if (L.length >= MaxSize)//当前存储空间已满
		return false;
	for (int j = L.length; j >= i; j--)//将第i个元素及其之后元素依次向后移动,从末尾开始
	{
		L.data[j] = L.data[j - 1];
	}
	L.data[i - 1] = e;//在i位置上放入e
	L.length++;//长度加1
	return true;
}

3 删除

bool Delete(SqList& L, int i, ElemType& e)
{
	if (i < 1 || i >L.length)
		return false;
	e = L.data[i - 1];
	for (int j = i; j <L.length ; j++)
	{
		L.data[j - 1] = L.data[j];
	}
	L.length--;
	return true;

}

4 顺序表优缺点:
优点:

  • 存储密度大
  • 可以随机存取
    缺点:
  • 在插入、删除某一元素时,需要移动大量元素
  • 浪费存储空间
  • 属于静态存储形式,数据元素的个数不能自由扩充