满满干货~
queue队列
(一条队):FIFO先进先出(只能 访问/操作 队首和队尾元素)
声明队列时头文件加<queue>
queue<T>容器名
例:queue<int> q;
常用操作函数:
q.push(x);//入队
q.pop();//出队
q.front();//访问队首元素
q.back();//访问队尾元素
q.size();//访问队列长短
q.empty();//判断队列是否为空,为空为真
————————
stack栈
(弹夹):FILO先进后出(只能访问顶元素)
声明栈时头文件加<stack>
stack<T> 容器名
例:stack<int> stk;
常用操作函数:
stk.push(x);//入栈
stk.pop();//出栈
stk.top();//访问栈顶元素
stk.size();//访问栈的大小
stk.empty();//判断队列是否为空,为空为真
————————
递归
定义:
传递/回归
函数调用自己就是递归
1.直接递归:常用
例如:
从前有座山……
2.间接递归:不常用
例如:
踢皮球现象
边界:
if(n==1)
{
return ?;
}
方程:
else
{
return ?;
}
举个几个例题
队列:
银行取款
题目描述
在现代文明社会中,大家在诸如银行办理业务、车站买票等活动时都很文明没有插队的现象,本着“先来先服务”的规矩。
五一马上到了,凡凡的爸爸打算上银行去取点钱,带着一向表现很好的凡凡同学到海南旅游,凡凡的爸爸到银行时发现很多人在办理业务,凡凡的爸爸就自觉地在排队机上去了一个业务号码,并焦急的等待着银行柜台叫自己的号码……
输入格式
输入中包含大写字母 I(表示等待办理业务)和顾客的序号;
或者大写字母 O(表示办理完业务的人离开);
输入数据不超过 100 行。
输出格式
输出银行排队中出队顾客序列,若队列为空(没人等待),则输出 None。
样例 #1
样例输入 #1
O
I 1
I 2
O
I 3
O
O
O
样例输出 #1
None
1
2
3
None
代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
queue<int> q;
char a;
int x;
while(cin>>a)
{
if(a=='O')
{
if(q.empty())
{
cout<<"None"<<endl;
}
else
{
cout<<q.front()<<endl;
q.pop();
}
}
else
{
cin>>x;
q.push(x);
}
}
return 0;
}
栈:
栈操作
题目描述
请你实现一个栈(stack),支持如下操作:
push(x):向栈中加入一个数 xx 。
pop():将栈顶弹出。如果此时栈为空,则不进行弹出操作,并输出 Empty Stack。
top():输出栈顶元素。如果此时栈为空,则输出 Empty Stack 。
size():输出此时栈内元素个数。
输入格式
第一行,一个整数 n (n<100) 表示操作的次数。
接下来 n 行,每行表示一个操作。格式如下:
1 x:表示将元素 x (1≤x≤1000)x (1≤x≤1000) 加入栈。2:表示将栈顶弹出栈。3:表示查询栈顶。4:表示查询栈内元素个数。
输出格式
输出若干行,对于每个操作,按「题目描述」输出结果。
每条输出之间应当用空行隔开。
样例 #1
样例输入 #1
10
1 1
3
2
4
2
1 2
1 3
3
4
2
样例输出 #1
1
0
Empty Stack
3
2
代码:
#include<bits/stdc++.h>
#include<stack>
using namespace std;
int main(){
stack<int>stk;
int n,x,y;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>x;
if(x==1)
{
cin>>y;
stk.push(y);
}
else if(x==2)
{
if(stk.empty())
{
cout<<"Empty Stack"<<endl;
}
else
{
stk.pop();
}
}
else if(x==3)
{
if(stk.empty())
{
cout<<"Empty Stack"<<endl;
}
else
{
cout<<stk.top()<<endl;
}
}
else if(x==4)
{
cout<<stk.size()<<endl;
}
}
return 0;
}
递归
N的阶乘(简单版)
题目描述
一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且 00 的阶乘为 11 。
例如:55 的阶乘:5!=1×2×3×4×5=1205!=1×2×3×4×5=120。
你的任务是:输入正整数 nn,输出 nn 的阶乘(n!n!)。
输入格式
一个正整数 n(1≤n≤15)n(1≤n≤15)。
输出格式
输出 n!n!。
样例 #1
样例输入 #1
5
样例输出 #1
120
代码:
#include<bits/stdc++.h>
using namespace std;
long long f(int n)
{
if(n==1)
{
return 1;
}
else
{
return f(n-1)*n;
}
}
int main(){
int n;
cin>>n;
cout<<f(n);
return 0;
}
485

被折叠的 条评论
为什么被折叠?



