建材招商网站WordPress 支付宝支付
接下来分别展示动态数组,链表,队列,栈,哈希表的相关代码。由于之前用的C语言,对于实现相关数据结构需要自己手动去做,比较麻烦,现在学习了C++关于数据结构的一些基础操作,来简便刷题的过程。下面我把完整的程序切割成几份来分别展示:
动态数组(vector)
#include <bits/stdc++.h>
using namespace std;int main()
{//动态数组:int n = 5;//数组大小为5的动态数组vector<int> nums(n);cout<<nums.empty()<<endl;//数组的大小cout<<nums.size()<<endl;//在尾部插入元素nums.push_back(666);cout<<nums.size()<<endl;//得到数组的最后一个元素cout<<nums.back()<<endl;//删除最后一个元素nums.pop_back();cout<<nums.size()<<endl;//可以通过方括号直接进行修改nums[1] = 222;cout<<nums[1]<<endl;//在索引为3的地方加入元素nums.insert(nums.begin()+3,100);//删除索引为2的元素nums.erase(nums.begin()+2);//交换两个元素swap(nums[0],nums[1]);for(int i = 0;i < nums.size();i++){cout<<nums[i]<<" ";}
链表(list)
//链表:// 初始化链表list<int> lst{1, 2, 3, 4, 5};// 检查链表是否为空,输出:falsecout << lst.empty() << endl;// 获取链表的大小,输出:5cout << lst.size() << endl;// 在链表头部插入元素 0lst.push_front(0);// 在链表尾部插入元素 6lst.push_back(6);// 获取链表头部和尾部元素,输出:0 6cout << lst.front() << " " << lst.back() << endl;// 删除链表头部元素lst.pop_front();// 删除链表尾部元素lst.pop_back();// 在链表中插入元素auto it = lst.begin();// 移动到第三个位置advance(it, 2);// 在第三个位置插入 99lst.insert(it, 99);// 删除链表中某个元素it = lst.begin();// 移动到第二个位置advance(it, 1);// 删除第二个位置的元素lst.erase(it);// 遍历链表// 输出:1 99 3 4 5for (int val : lst) {cout << val << " ";}cout << endl;
队列(queue)
// 初始化一个空的整型队列 qqueue<int> q;// 在队尾添加元素q.push(10);q.push(20);q.push(30);// 检查队列是否为空,输出:falsecout << q.empty() << endl;// 获取队列的大小,输出:3cout << q.size() << endl;// 获取队列的队头和队尾元素,输出:10 和 30cout << q.front() << " " << q.back() << endl;// 删除队头元素q.pop();// 输出新的队头元素:20cout << q.front() << endl;
栈(stack)
// 初始化一个空的整型栈 sstack<int> s;// 向栈顶添加元素s.push(10);s.push(20);s.push(30);// 检查栈是否为空,输出:falsecout << s.empty() << endl;// 获取栈的大小,输出:3cout << s.size() << endl;// 获取栈顶元素,输出:30cout << s.top() << endl;// 删除栈顶元素s.pop();// 输出新的栈顶元素:20cout << s.top() << endl;
哈希表(unordered_map)
// 初始化哈希表unordered_map<int, string> hashmap{{1, "one"}, {2, "two"}, {3, "three"}};// 检查哈希表是否为空,输出:0 (false)cout << hashmap.empty() << endl;// 获取哈希表的大小,输出:3cout << hashmap.size() << endl;// 获取指定键对应的值,若不存在会返回默认构造的值// 输出空字符串cout << hashmap[4] << endl;// 插入一个新的键值对hashmap[4] = "four";// 获取新插入的值,输出:fourcout << hashmap[4] << endl;// 删除键值对hashmap.erase(3);// 遍历哈希表// 输出(顺序可能不同):// 4 -> four// 2 -> two// 1 -> onefor (const auto &pair: hashmap) {cout << pair.first << " -> " << pair.second << endl;}// 特别注意,访问不存在的键会自动创建这个键unordered_map<int, string> hashmap2;// 键值对的数量是 0cout << hashmap2.size() << endl; // 0// 访问不存在的键,会自动创建这个键,对应的值是默认构造的值cout << hashmap2[1] << endl; // empty stringcout << hashmap2[2] << endl; // empty string// 现在键值对的数量是 2cout << hashmap2.size() << endl; // 2}