栈
push——压入
pop——弹出
特点:先进后出
一、手动实现一个栈
封装数据结构——栈写成class或struct,将当前栈的数据和对当前栈的操作都放在里面
定义一个结构体Stack,规定最大存储元素个数10000,然后用来定义存储数据的数组int data[10000],top指示现在栈顶的下标,栈底没有元素,默认下标为0,初始化时,栈中没有元素,top的值为-1.
代码:
#include<iostream>
using namespace std;
struct Stack{
int data[10000];
int top=-1;
void push(int x){
top++;
if(top<10000){
data[top]=x;
}
else{
top--;
cout<<"stack overflow"<<endl;
}
}
void pop(){
if(top>=0){
top--;
}
}
int topval(){ //获取栈顶元素
if(top>=0){
return data[top];
}
}
};
int main(){
Stack s;
for(int i=1;i<=10;i++){
s.push(i);
}
for(int i=1;i<=10;i++){
cout<<s.topval()<<" "; //每次取栈顶元素
s.pop();
}
return 0;
}
二、蒜头君吃桃
蒜头君买了一堆桃不知道个数,第一个吃了一半的桃子,又多吃了一个。以后他每天吃剩下的桃子的一半还多一个,到第n天只剩下一个桃子了,问一开始买了多少个桃子?
输入格式
输入一个·整数n(2<=n<=30)
输出格式
输出桃子数量
输入样例
3
输出样例
10
代码
#include<iostream>
using namespace std;
int n;
int f(int x){ //x:天数
if(x==n){
return 1;
}
else{
return (f(x+1)+1)*2;
}
}
int main(){
scanf("%d",&n);
printf("%d",f(1));
return 0;
}