数据结构(一):线性表——顺序表的定义与基本操作

目录

 一、定义

二、初始化

三、插入操作

四、删除操作

五、按值查找


 一、定义

(动态分配存储空间法)

#define InitSize 30
#define ElemType int
typedef struct {
	ElemType *data;
	int length; ///当前长度
	int listsize; //当前分配的存储容量
}SqList;

二、初始化

函数——InitList

void InitList(SqList &list)
{
	list.data = new ElemType[InitSize];
	if (!list.data) exit(-1);
	list.length = 0;
	list.listsize = InitSize;
}

注:

  • C语言的初始动态分配语句为:L.data=(ElemType*)malloc(sizeof(ElemType)*InitSize);
  • C++的初始动态分配语句为:L.data=new ElemType[InitSize];

三、插入操作

bool ListInsert(SqList& L, int i,ElemType e)
{
	if (i < 1 || i > L.length + 1) //判断i的范围是否有效
		return false;
	if (L.length >= L.listsize) //当前存储空间已满,不能插入
		return false;
	for (int j = L.length; j >= i; j--) //依次后移
		L.data[j] = L.data[j - 1];
	L.data[i - 1] = e; //在位置i处放入e
	L.length++;
	return true;
}

注:

  • 插入——在顺序表第 i ( 1 <= i <= L.length+1 ) 个位置插入e
  • 注意区别顺序表的位序和数组下标

四、删除操作

bool ListDelete(SqList& L, int i,ElemType& e)
{
	if (i < 1 || i > L.length) //判断i的范围是否有效
		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;
}

五、按值查找

int LocateElem(SqList L,ElemType e)
{
	int i;
	for (int i = 0; i < L.length; i++)
		if (L.data[i] == e)
			return i + 1; //数组下标为 i ,顺序表位序为 i+1
	return 0; //退出循环,说明查找失败
}

猜你喜欢

转载自blog.csdn.net/qq_45832961/article/details/124363976