【栈】 学习记录

栈的基本操作

//基本数据结构

typedef struct {
  ElemTp *elem;
  int n;
  int top;
}

//创建栈

int creatStack(SqStack &s,int n){
 if(n<=0)return 0;
 s.elem=newElemTp[n];
s.n=n;
 s.top=-1;
 if(!s.elem)return 0;
else return 1;
}

//摧毁栈

void distroyStack(&SqStack &s)

{

delete []s.elem;

s.n=0;

s.top=-1;

}

//出栈

int pop(SqStack &s,ElemTp &e)
{
  if(s.top==-1) return 0;
  e=s.elem[top--];
return 1;
}

//入栈

int  push(SqStack &s,int t)
{
 if(s.top>=s.n-1)  return 0;
  s.elem[++s.top]=t;
return 1;
}

//判断是否为空栈

int empty(SqStack &s)
{
if(s.top==-1) return 1;
else return 0;
}

//判断是否栈满

int full(SqStack &s)
{
 return s.top>=s.n-1;
}
栈的应用

中缀式:

a+b*5/(3-c)

前缀式:

+ a / * b 5 - 3 c

后缀式:

a b 5 * 3 c - / +

中缀式变换为前缀式与后缀式的手工方法 a. 对中缀表达式加完全括号; b. 将每个运算符移动到本层次括号之前(之后); c. 去掉所有括号,即得前(后)缀表达式。

栈习题练习

Fibnacci数列用栈实现

。。代码有问题,但是不知道哪里错了,😵

#include <iostream>
#include<iomanip>
using namespace std;
typedef struct{
int r1;
int r2;
int n;
}ElemTp;
 int fib(int n)
 {
    ElemTp *s=new ElemTp[n];
    int top=-1;
    ElemTp a={n,-1,-1};
    s[++top]=a;
    int r;
    while(1)
        if(s[top].r1!=-1&&s[top].r2!=-1)
        {
            r=s[top].r1+s[top].r2;
            --top;
            if(top==-1)break;
            if(s[top].r1==-1) s[top].r1=r;
            else s[top].r2=r;
        }
        else
            if(s[top].n<=1) {s[top].r1=1;s[top].r2=0;}//入栈{n-1,1,0}
            else{
                a.n=s[top].n-1;//入栈n-1
                a.r1=-1;a.r2=-1;
                if(s[top].r1!=-1)
                    a.n--;//入栈n-2
                s[++top]=a;
            }
     delete []s;
     return r;
 }
int main()
{
   int i;
   for(i=0;i<20;i++)
   {
       cout<<setw(12)<<fib(i);
       if(i%5==4) cout<<endl;
   }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值