C++ 顺序表

顺序表的操作有以下:

1 顺序表的元素插入

给定一个索引和元素,这个位置往后的元素位置都要往后移动一次,元素插入的步骤有以下几步

(1)判断插入的位置是否合法,如果不合法则抛出异常

(2)如果是顺序表已满,则需要扩容顺序表,一般是将原有顺序表的容量进行倍增

(3)将插入位置之后的元素向后移动,为新元素腾出空间

(4)将新元素插入到指定位置

(5)更新顺序表的大小

2 顺序表的元素删除

将对应索引位置元素删除后,这个位置往后所有元素位置往前移动一次,元素删除有以下几步

(1)判断删除位置是否合法,如果不合法则抛出异常

(2)如果删除位置为最后一个元素,则顺序表的大小直接-1

(3)如果删除位置不是最后一个元素,则将删除位置之后的元素向前移动,覆盖要删除的元素

(4)更新顺序表的大小

3 顺序表的元素查找

找到元素位置,并且返回索引,查找步骤为

(1)遍历顺序表,对顺序表中每个元素与指定元素进行比较,如果找到则返回对应索引

(2)如果遍历完所有元素,都没有找到对应元素,则返回-1

4 顺序表的元素索引

直接即可获得

5 顺序表的元素修改

直接将给定位置改为对应的值

附顺序表代码见下:

cpp 复制代码
#include<iostream>
using namespace std;
#define eleType int

struct SequentialList {
	eleType* elements;
	int size;
	int capacity;
};

void initializeList(SequentialList* list, int capacity) {
	list->elements = new eleType[capacity];
	list->size = 0;
	list->capacity = capacity;
}

void destoryList(SequentialList* list) {
	delete[] list->elements;
}

int size(SequentialList* list) {
	return list->size;
}

bool isEmpty(SequentialList* list) {
	return list->size == 0;
}

void insert(SequentialList* list, int index, eleType element) {
	if (index <0 || index > list->size) {
		throw std::invalid_argument("Invalid index");
	}

	if (list->size == list->capacity) {
		int newCapacity = list->capacity * 2;
		eleType *newelement = new eleType[newCapacity];
		for (int i = 0; i < newCapacity / 2; ++i) {
			newelement[i] = list->elements[i];
		}
		delete[] list->elements;
		list->elements = newelement;
		list->capacity = newCapacity;
	}
	if (list->size < list->capacity) {
		for (int i = list->size - 1; i > index; --i) {
			list->elements[i] = list->elements[i - 1];
		}
		list->elements[index] = element;
		list->size++;
	}

}
void deleteElement(SequentialList* list, int index) {
	if (index < 0 || index >= list->size) {
		throw std::invalid_argument("Invalid_index");
	}
	for (int i = index; i < list->size - 1; ++i) {
		list->elements[i] = list->elements[i + 1];
	}
	list->size--;
}

int findElement(SequentialList* list, eleType element) {
	for (int i = 0; i < list->size; ++i) {
		if (list->elements[i] == element) {
			return i;
		}
	}
	return -1;
}

eleType getElement(SequentialList* list, int index) {
	if (index < 0 || index >= list->size) {
		throw std::invalid_argument("Invalid_index");
	}
	return list->elements[index];
}

void updateElement(SequentialList* list, int index, eleType value) {
	if (index < 0 || index >= list->size) {
		throw std::invalid_argument("Invalid_index");
	}
	list->elements[index] = value;
}
相关推荐
别动我齐刘海40 分钟前
机器人运动控制学习4——状态估计 State Estimation
c++·人工智能·学习·目标检测·机器学习·机器人·自动驾驶
学习星球1 小时前
OpenHarness 全面配置教学——从游戏开发工作流引入
c++·游戏·ai·ai编程
wWYy.1 小时前
C++与C的区别
c语言·c++
程序员与背包客_CoderZ6 小时前
高性能分布式KV存储引擎RocksDB入门与C/C++编码实战
c语言·开发语言·数据库·c++·分布式·分布式数据库·rocksdb
进击的_鹏6 小时前
从零开始的 Redis 学习
服务器·数据库·c++·redis·缓存
_Narcissus_7 小时前
链表算法题和静态链表
数据结构·c++·笔记·算法·链表·ai·力扣
布莱克6057 小时前
C++拷贝构造与拷贝赋值运算符的区别详解
开发语言·c++
啦啦啦啦啦zzzz8 小时前
时间轮定时器
linux·服务器·网络·c++·定时器
此生决int8 小时前
深入理解C++系列(15)——AVL树
开发语言·c++
一只旭宝8 小时前
预约系统版本2(pyhton+flask可视化版本)
服务器·数据库·c++·笔记·python·flask