数据结构基础-顺序表

顺序表的三个要素

用 elems 记录存储位置的基地址

分配一段连续的存储空间 size

用 length 记录实际的元素个数,即顺序表的长度

算法实现

结构定义
typedef struct {
	int* elem;	//顺序表基地址
	int len;	//顺序表长度
	int size;	//顺序表空间
}SqList;
初始化
bool initSqList(SqList& L) {
	L.elems = new ElemType[MAX_SIZE];
	if (!L.elems)return false;
	L.len = 0;
	L.size = MAX_SIZE;
	return true;
}
增加元素
bool appendList(SqList& L, ElemType e) {
	if (L.len == MAX_SIZE) return false;
	L.elems[L.len] = e;
	L.len++;
	return true;
}
插入元素
bool insertList(SqList& L, int pos, ElemType e) {
	if (pos < 0 || pos >= L.len) return false;
	if (L.len == MAX_SIZE) return false;
	for (int i = L.len - 1; i >= pos; i--) {
		L.elems[i + 1] = L.elems[i];//从最后一个元素开始后移,直到第pos个元素后移
	}
	L.elems[pos] = e;
	L.len++;
	return true;
}
删除元素
bool deleteList(SqList& L, int pos) {
	if (pos < 0 || pos >= L.len) return false;
	//删除最后一个元素
	if (pos == L.len - 1) {
		L.len--;
		return true;
	}
	//删除非末尾元素
	for (int i = pos; i < L.len - 1; i++) {
		L.elems[i] = L.elems[i + 1];
	}
	L.len--;
	return true;
}
销毁元素
void destroyList(SqList& L) {
	if (L.elems) delete[]L.elems;
	L.len = 0;
	L.size = 0;
}

测试

int main() {
	ElemType val;
	int pos;
	SqList L;
	initList(L);
	cout << "SqList Initalizing..." << endl;
	//1. 初始化
	if (initList(L)) {
		cout << "Initalize sucessfully !" << endl;
	}
	//2. 添加元素
	int count = 0;
	cout << "请输入要添加的元素个数:";
	cin >> count;
	for (int i = 0; i < count; i++) {
		cout << "\nInput your value: ";
		cin >> val;
		if (appendList(L, val)) {
			cout << "Append sucessfully !" << endl;
		}
		else {
			cout << "Append failed" << endl;
		}
	}
	printList(L);
	//3. 插入元素
	cout << "Input your value's position and value: ";
	cin >> pos >> val;
	if (insertList(L, pos, val)) {
		cout << "Insert sucessfully !" << endl;
	}
	else {
		cout << "insert failed" << endl;
	}
	printList(L);
	//4. 删除元素
	cout << "Input delete position: ";
	cin >> pos;
	if (deleteList(L, pos)) {
		cout << "delete sucessfully !" << endl;
	}
	else {
		cout << "delete failed" << endl;
	}
	printList(L);
	//5. 销毁
	cout << "destroy SqList..." << endl;
	destroyList(L);
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

run sun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值