【每日刷题】Day100

【每日刷题】Day100

🥕个人主页:开敲🍉

🔥所属专栏:每日刷题🍍

🌼文章目录🌼

[1. 【模板】堆_牛客题霸_牛客网 (nowcoder.com)](#1. 【模板】堆_牛客题霸_牛客网 (nowcoder.com))

[2. 【模板】链表_牛客题霸_牛客网 (nowcoder.com)](#2. 【模板】链表_牛客题霸_牛客网 (nowcoder.com))

[3. 【模板】队列_牛客题霸_牛客网 (nowcoder.com)](#3. 【模板】队列_牛客题霸_牛客网 (nowcoder.com))

1. 【模板】堆_牛客题霸_牛客网 (nowcoder.com)

//C++堆(大堆)的实现。

#include <iostream>

#include <vector>

using namespace std;

class Heap

{

public:

Heap()

:_size(0)

{}

void Swap(int& x,int& y)

{

int tmp = x;

x = y;

y = tmp;

}

//向下调整

void AdjustDown(int parents)

{

int child = parents*2+1;

while(child<_size)

{

if(child+1<_size&&_arr[child+1]>_arr[child])

child++;

if(_arr[child]>_arr[parents])

Swap(_arr[child],_arr[parents]);

else

break;

parents = child;

child = parents*2+1;

}

}

//向上调整

void Adjustup(int child)

{

int parents = (child-1)/2;

while(child>0)

{

if(_arr[child]>_arr[parents])

Swap(_arr[child],_arr[parents]);

else

break;

child = parents;

parents = (child-1)/2;

}

}

//入堆

void push(int val)

{

_arr.push_back(val);

Adjustup(_size);

_size++;

}

//删除堆顶元素

void pop()

{

if(_size==0)

cout<<"empty"<<endl;

else

{

cout<<_arr[0]<<endl;

Swap(_arr[0],_arr[_size-1]);

_arr.pop_back();

_size--;

AdjustDown(0);

}

}

//获取堆顶元素

void top()

{

if(_size==0)

cout<<"empty"<<endl;

else

cout<<_arr[0]<<endl;

}

private:

vector<int> _arr;

size_t _size;

};

int main()

{

Heap h;

int n = 0;

cin>>n;

while(n--)

{

int data = 0;

string s;

cin>>s;

if(s=="push")

{

cin>>data;

h.push(data);

}

if(s=="top")

h.top();

if(s=="pop")

h.pop();

}

return 0;

}

2. 【模板】链表_牛客题霸_牛客网 (nowcoder.com)

//C++链表模拟实现。

#include <iostream>

#include <list>

using namespace std;

class List

{

class list_node

{

public:

list_node(int y = -2147483648)

:next(nullptr)

,val(y)

{}

int val;

list_node* next;

};

public:

List()

:head(new list_node)

,_size(0)

{}

//打印链表

void printf()

{

if(_size)

{

list_node* pmove = head->next;

while(pmove)

{

cout<<pmove->val<<' ';

pmove = pmove->next;

}

}

else

cout<<"NULL";

}

//在值为x的节点前插入值为y的节点

void Insert(int x,int y)

{

list_node* pnext = head->next;

list_node* prev = head;

while(pnext&&pnext->val!=x)

{

prev = prev->next;

pnext = pnext->next;

}

list_node* newnode = new list_node(y);

prev->next = newnode;

newnode->next = pnext;

_size++;

}

//删除值为x的节点

void Delete(int x)

{

list_node* pmove = head->next;

list_node* prev = head;

while(pmove&&pmove->val!=x)

{

prev = prev->next;

pmove = pmove->next;

}

if(pmove)

{

prev->next = pmove->next;

_size--;

delete pmove;

}

}

private:

list_node* head;

size_t _size;

};

int main()

{

List l;

int n = 0;

cin>>n;

while(n--)

{

int x,y;

string s;

cin>>s;

if(s=="insert")

{

cin>>x>>y;

l.Insert(x, y);

}

if(s=="delete")

{

cin>>x;

l.Delete(x);

}

}

l.printf();

return 0;

}

3. 【模板】队列_牛客题霸_牛客网 (nowcoder.com)

//C++队列的实现。

#include <iostream>

#include <list>

#include <string>

using namespace std;

class Queue

{

class queue_node

{

public:

queue_node(int _val = -2147483648)

:next(nullptr)

,val(_val)

{}

int val;

queue_node* next;

};

public:

Queue()

:head(new queue_node)

,pmove(head)

,_size(0)

{}

//获取队头元素

void front()

{

if(_size)

cout<<head->next->val<<endl;

else

cout<<"error"<<endl;

}

//队尾插入元素

void Push(int data)

{

queue_node* newnode = new queue_node(data);

pmove->next = newnode;

pmove = pmove->next;

_size++;

}

//队头删除元素

void pop()

{

if(_size)

{

queue_node* pnext = head->next->next;

queue_node* pcur = head->next;

cout<<pcur->val<<endl;

if(pcur==pmove)

pmove = head;

head->next = pnext;

delete pcur;

_size--;

}

else

cout<<"error"<<endl;

}

private:

queue_node* head;

queue_node* pmove;

size_t _size;

};

int main()

{

Queue q;

int n;

cin>>n;

while(n--)

{

int data;

string s;

cin>>s;

if(s=="push")

{

cin>>data;

q.Push(data);

}

if(s=="pop")

q.pop();

if(s=="front")

q.front();

}

return 0;

}

相关推荐
A懿轩A8 分钟前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
古希腊掌管学习的神9 分钟前
[搜广推]王树森推荐系统——矩阵补充&最近邻查找
python·算法·机器学习·矩阵
云边有个稻草人12 分钟前
【优选算法】—复写零(双指针算法)
笔记·算法·双指针算法
机器视觉知识推荐、就业指导13 分钟前
C++设计模式:享元模式 (附文字处理系统中的字符对象案例)
c++
半盏茶香13 分钟前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
忘梓.1 小时前
解锁动态规划的奥秘:从零到精通的创新思维解析(3)
算法·动态规划
️南城丶北离1 小时前
[数据结构]图——C++描述
数据结构··最小生成树·最短路径·aov网络·aoe网络
Ronin3051 小时前
11.vector的介绍及模拟实现
开发语言·c++
✿ ༺ ོIT技术༻1 小时前
C++11:新特性&右值引用&移动语义
linux·数据结构·c++
字节高级特工1 小时前
【C++】深入剖析默认成员函数3:拷贝构造函数
c语言·c++