算法基础2.0

算法基础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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值