常用代码模板3——基础数据结构

这篇博客详细介绍了常用的数据结构,包括结构体的定义和排序,队列的两种实现方式,双端队列、优先队列、set/map的用途,堆的STL实现,栈的数组和STL栈方法,链表操作,树的存储和遍历,以及二叉树和完全二叉树的存储和遍历。此外,还讲解了图的邻接矩阵和邻接表存储以及遍历方法,并提供了相关例题。
摘要由CSDN通过智能技术生成

 结构体

定义

struct person {
    int x, y, z;
    int sum;
    ......
};
person a, b[N];

Copy

结构体排序

bool cmp(person a, person b)
{
    // 自定义的比较规则
    if(a.x != b.x)
        return a.x > b.x;
    ......
    return a.y > b.y;
}
sort(b+1, b+n+1, cmp);

Copy

例题:

  1. 学生信息(stumessage) - TopsCoding
  2. 成绩排序 - TopsCoding
  3. 生日相同问题(birthday) - TopsCoding

队列

CSP 经常考

方法一、使用数组+变量

int q[1000];            // 定义一个最大历史容量是 1000 的队列
int head=0, tail=0;     // 定义队列头 队列尾,初始值依个人习惯而设,一般全为 0

int len = tail - head;   // 获取队列的长度
if(head == tail)         // 判断队列为空
int h = q[head];         // 取队首
q[tail++] = t;           // 将 t 入队
head++;                  // 队首出队,前提是队列不为空   

Copy

方法二、STL 队列 queue

queue<int> q;            // 定义一个空队列
int len = q.size();      // 获取队列的长度
if(q.empty())            // 判断队列为空
int h = q.front();       // 取队首
q.push(t);               // 将 t 入队
q.pop();                 // 队首出队,前提是队列不为空   
......                   // 更多 STL 队列的使用方法可自行百度

Copy

例题:

  1. 周末舞会 - TopsCoding
  2. 取牌游戏 - TopsCoding
  3. 公交换乘 - TopsCoding
  4. 海港 - TopsCoding

双端队列

deque<int> q;            // 定义一个空队列
int len = q.size();      // 获取队列的长度
if(q.empty())            // 判断队列为空
int h = q.front();       // 取队首
q.push_back(t);               // 将 t 入队尾
q.push_front(t);              // 将 t 入队首
q.pop_back();                 // 队尾出队,前提是队列不为空  
q.pop_front();                 // 队首出队,前提是队列不为空 
for(int i = 0; i < q.size(); i++)
{
    cout << q[i] << ' ';
    q[i] = 0;               // 遍历修改双端队列
}
......                   // 更多 STL 队列的使用方法可自行百度

Copy

优先队列

一种时刻保持队首是队列中最大/最小值的队列,底层利用的是二叉堆实现。

priority_queue<int&
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值