C++顺序表和vector

线性表是n个具有相同特征的数据元素的有序序列 ------ 人话:每个元素的类型都是一致的,并且有先后顺序 数据表其实也就是一个相对简单的数据结构

线性表的存储结构:可以分为2种,用顺序存储实现的线性表就是顺序存储,链式存储

顺序存储:逻辑上相邻的元素,在内存中也存放在相邻的位置。实际上,线性表的顺序存储就是用数组来实现的

顺序表的实现方式:静态和动态。 动态的实现 通过new和delete来申请和释放空间。静态实现:直接创建一个足够大的数组,来充当顺序表。静态分配是直接向内存申请一大块连续的区域,动态是按需所取,合理的申请大小空间

创建:

const int N = 1e6 + 10; 根据实际情况而定

int aN; 用足够大的数组来模拟顺序表

int n; 标记顺序表里面有多少个元素

int main()

{

return 0;

}

添加一个元素:分为3种 尾插:在顺序表的后面插入一个新元素

头插:在顺序表的前面插入一个新元素

任意位置插入:在位置p处插入一个元素

const int N = 1e6 + 10;

int aN;

int n;

void print()

{

for(int i = 1; i <= n; i++)

{

cout << ai << " ";

}

cout << endl << endl;

}

void push_back(int x) 尾插

{

a++n = x;

}

void push_front(int x) 头插

{

for(int i = n; i >= 1; i--)

{

ai + 1 = ai;

}

a1 = x;

n++;

}

void insert(int x,int p) 任意位置插入

{

for(int i = n; i >= p; i--)

{

ai + 1 = ai;

}

ap = x;

n++;

}

int main()

{

push_back(2);

print();

push_back(5);

print();

push_back(1);

print();

push_back(3);

print();

return 0;

}

删除一个元素的操作:尾删、头删、任意删

void pop_back() 尾删

{

n--;

}

void pop_front(int x) 头删

{

for(int i= 2; i <= n; i++)

{

ai - 1 = ai;

}

n--;

}

void erase(int p) 任意位置删

{

for(int i = p + 1; i <= n; i++)

{

ai - 1 = ai;

}

n--;

}

查找元素:

//按值查找

int find(int x)

{

for(int i = 1; i <= n; i++)

{

if(ai == x)

return i;

}

return 0;

}

//按位查找 返回顺序表中第p位的元素

int at(int p)

{

return ap;

}

修改元素

void change(int p, int x)

{

ap = x;

}

清空顺序表

void clear()

{

n = 0;

}

封装静态顺序表

vector的介绍 需要头文件为 #include<vector>

vector<int>a1; <> 里面放我要放的类型 创建一个名字为a1的可变长数组 里面都是int类型的数据

vector<int>a2(N); 创建一个大小为10的可变长数组,里面的值都初始化为0

vector<int>a3(N,2); 创建一个大小为10的可变长数组,里面的值都初始化为2

vector<int>a4 = {1,2,3,4,5};初始化列表的创建方式

vector<vector<int>> a5; 创建一个二维的可变长数组

vector<string> a6; 存字符串

vector<node> a7; 存结构体

vector<int> a8N; 创建了一个大小为N的vector数组

size 返回实际元素个数

void print(vector<int>&a)

{

for(int i = 0; i < a.size(); i++)

{

cout << ai << " ";

}

cout << endl;

}

empty 返回顺序表是否为空,因此是一个bool类型的返回值

if(a1.empty()) cout << "空" << endl;

else cout << "不空" << endl;

begin 返回起始位置的迭代器(左闭)

end 返回终点位置的下一个位置的迭代器(右开)

push_back:尾部添加一个元素

pop_back:尾部删除一个元素

当然还有insert 与 erase 不过由于时间复杂度过高,尽量不使用

front 返回首元素

back 返回尾元素

resize:修改vector的大小。如果大于原始大小,多出来的位置会补上默认值,一般是0。如果小于原始大小,相当于把后面的元素全部删掉

vector<int>aa(5,1);

print(aa);

aa.resize(10);

print(aa);

aa.size(3);

print(aa);

clear:清空vector

vector<int>aa(5,1);

cout << aa.size() << endl;

aa.clear();

cout << aa.size() << endl;

pair 用于将两个值组合成一个单一的对象,通常用于存储值对应或返回多个值,它有两个公有成员 first 和 second ,分别表示第一个值和第二个值

pair<第一个关键字的类型,第二个关键字的类型> pair<int,int>p1;

一般使用pair的时候会进行 typedef

相关推荐
铲灰几秒前
做个总结而已
开发语言
西西弗Sisyphus8 分钟前
Qt 实现一个 水波进度球
c++·qt·c
无忧.芙桃9 分钟前
数据结构之排序算法(中):冒泡排序与快速排序,从相邻交换到工程级优化
c语言·c++·排序算法
不会就选b9 分钟前
算法日常・每日刷题--<贪心>17
算法
IvanCodes9 分钟前
Python 文件操作(十二):文件与目录的读写
开发语言·python
Hhy_110715 分钟前
《C++深度解构04》类和对象(下)——类型转换、static、友元与编译器优化
c语言·c++·学习·类和对象·visual studio
qq_1998868741 分钟前
第7板块·第1节:通用算子分类与设计模式
c++·人工智能·gpu算力·cuda
6Hzlia2 小时前
【Classic 150 刷题计划】 LeetCode 205. 同构字符串 | C++ 双向绑定与哈希表映射
c++·算法·leetcode
神仙别闹8 小时前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
会周易的程序员8 小时前
5 节点边缘冗余方案(上):基于 aiRaft 的物联网高可用控制面设计
c++·分布式·物联网·raft·iot·共识