算法基础2.0
文章目录
## 1.结构体
结构体基本写法:
struct node{
int b;
char c;
string d
long long e;
}a[1000];
排序方案:
bool cmp(node x,node y){
if(x.k!=y.k) return x.k<y.k;//k,l为代表的变量
else return x.l<y.l;
}
sort(a+1,a+1+n,cmp)//a为代表数组
2.结构体与模板
基础内容–写结构体的函数
struct Book
{
int book_id;
string name;
};
void setBook(Book bk)
{
bk.book_id = 3;
bk.name = "World";
}
3.链表
基础知识:数组模拟链表
具体实现:定义struct数组
struct node{
int pre;
int next
}a[1000];
则会有以下效果:
/pre/a[i]/next/
/ 这个数的前一个数k1 / 这个数n / 这个数的后一个数l /——–a[n]
/ 这个数前一个数n / 这个数l / 这个数后一个数 /———-a[l];
….这样类推,这样的话数与数之间就不需要规律连接,而是以空间链接
查找
int head;
for(int j=1;j<=n;j++){
if(a[j].pre==0){//当头为0是,说明搜到了最前方
head=j;
break;
}
}
for(int k=head;k!=0;k=a[k].next){//不断连接数和数,形成队列
cout<<k<<endl;
}
4.vector表格
基本操作:
vector<int> c
c.clear() //移除容器中所有数据。
c.empty() //判断容器是否为空。
c.erase(pos) //删除pos位置的数据
c.erase(beg,end) //删除[beg,end)区间的数据
c.front() //传回第一个数据。
c.insert(pos,elem) //在pos位置插入一个elem拷贝
c.pop_back() //删除最后一个数据。
c.push_back(elem) //在尾部加入一个数据。
c.resize(num) //重新设置该容器的大小
c.size() //回容器中实际数据的个数。
c.begin() //返回指向容器第一个元素的迭代器
c.end() //返回指向容器最后一个元素的迭代器
2.迭代器:
vector<int>::iterator it;
for(it = obj.begin();it != obj.end(); it++)
cout << *it << " ";
注意:it指的是位置,前面加上* 才是it位置上的值
5.栈(先进后出)
1.定义一个栈:
stack<类型> 对象:
stack<int> s;
栈的其他使用方法
操作 | 函数 | 解释 |
---|---|---|
入栈 | push(x) | 将x入栈 |
出栈 | pop() | 弹出栈的第一个元素,返回值为栈顶元素值 |
元素个数 | size() | 获取栈中的元素个数,返回int |
获取栈顶元素 | top() | 获取栈顶的值。注意使用时判断是否空栈 |
6.队列(先进先出)
1.定义一个队列:
queue<int> q1;
queue<double> q2;
2.队列的使用:
操作 | 代码 | 解释 |
---|---|---|
入队 | q.push(x) | 将x元素放到队列的末端 |
出队 | q.pop() | 弹出队列的第一个元素,并不会返回元素的值 |
队首元素 | q.front() | 获取队列的第一个元素 |
队尾元素 | q.back() | 获取队列的最后一个元素 |
元素个数 | q.size() | 获取队中的元素个数,返回int |
判空 | q.empty() | 队列是否为空,返回bool,相当于q.size() == 0 |
7.map(注意,迭代器取值要用->)
1.定义一个map:
map<string,int> my_Map;
2.map的使用:
第一点:查找:
map<string,string>::iterator it;
it = dataMap.find(key);
if(it != dataMap.end()) {
string valueStr = it->second;
}
其他(插入数据):
my_Map["a"]=1; // 最常用的方法
my_Map.insert(map<string,int>::value_type("b",2));
my_Map.insert(pair<string,int>("c",3));
my_Map.insert(make_pair<string,int>("d",4));
注意:插入后会自动按值(即second)进行排序
my_Map.size() //返回元素数目
my_Map.empty() //判断是否为空
my_Map.clear() //清空所有元素
8.set(集合,元素不重复)
set的定义
set<类型> 对象名; 如:set<int> s;
添加元素
set<int> s;
s.insert(8);
s.insert(10);
s.insert(6);
s.insert(8); //重复元素不会插入
set遍历
setset 的遍历也是使用迭代器进行遍历, 可以正序遍历也可以反序遍历。
正序遍历
set<int> s;
set<int>::iterator it;
for (it = s.begin(); it != s.end(); it++)
cout << *it << endl;
反序遍历(注意是reverse,后面前面要加r)
set<int>::reverse_iterator it;
for (it = s.rbegin(); it != s.rend(); it++)
cout << *it << endl