zoukankan      html  css  js  c++  java
  • 20201012 千锤百炼软工人

    今天实现了一个栈

    是上课老师给的一道考研题目 两栈共享

    #include<iostream>
    #include<stdlib.h>
    #include<conio.h>
    #include<string.h>
    #define OK 1
    typedef int SElemType;
    using namespace std;
    typedef struct
    {
    int top[2],bot[2]; //栈顶和栈底指针//
    int m; //最大容纳个数//
    SElemType *V; //栈数组//
    }DblStack;
    void InitStack(DblStack &s,int i)
    {
    s.V = new int[s.m];
    s.m=i;
    s.top[0]=0;
    s.top[1]=s.m-1;
    cout<<"初始化成功!"<<endl;
    }
    void Dblpush(DblStack &s,SElemType x,int i)
    {
    if(i<0||i>1)
    {
    cout<<"i输入数值错误!"<<endl;
    }
    else
    {
    if(s.top[0]==s.top[1]+1)
    {
    cout<<"栈满!"<<endl;
    }
    else
    {
    if(i==0)
    {
    *(s.V+s.top[i])=x;
    s.top[i]++;
    cout<<"插入成功!"<<endl;
    }
    if(i==1)
    {
    *(s.V+s.top[i])=x;
    s.top[i]--;
    cout<<"插入成功!"<<endl;
    }
    }
    }
    }//把x插入到栈i中//
    int Dblpop(DblStack &s,int i,SElemType &x)
    {
    if(i<0||i>1)
    {
    cout<<"i输入数值错误!"<<endl;
    return 0;
    }
    else
    {
    if(i==0)
    {
    if(s.top[0]==0&&s.top[1]!=0)
    {
    cout<<"栈空"<<endl;
    return 0;
    }
    else
    {
    SElemType *p;
    x=*(s.V+s.top[i]);
    p=(s.V+s.top[i]);
    delete p;
    s.top[i]--;
    return x;
    }
    }
    if(i==1)
    {
    if(s.top[1]==s.m&&s.top[0]!=s.m)
    {
    cout<<"栈空"<<endl;
    return 0;
    }
    else
    {
    SElemType *m;
    x=*(s.V+s.top[i]);
    m=(s.V+s.top[i]);
    delete m;
    s.top[i]++;
    return x;
    }
    }
    }
    }//退掉位于栈i栈顶的元素//
    int IsEmpty(DblStack s,int i)
    {
    if(i==0||i==1)
    {
    if(i==0)
    {
    if(s.top[0]==0) return 1;
    else return 0;
    }
    if(i==1)
    {
    if(s.top[1]==s.m) return 1;
    else return 0;
    }
    }
    else{
    cout<<"i值错误!"<<endl;
    return 0;
    }
    }//判栈i空否, 空返回1, 否则返回0//
    int IsFull(DblStack s)
    {
    if(s.top[0]+1==s.top[1])
    {
    cout<<"栈满!"<<endl;
    return 1;
    }
    else
    {
    cout<<"未满!"<<endl;
    return 0;
    }
    }//判栈满否, 满返回1, 否则返回0
    void print(DblStack &s,int i)
    {
    if(i<0||i>1)
    {
    cout<<"i输入数值错误!"<<endl;
    }
    else
    {
    if(i==0)
    {
    for(int j=0;j<s.top[i];j++)
    {
    cout<<*(s.V+j)<<endl;
    }
    }
    if(i==1)
    {
    for(int j=s.m-1;j>s.top[i];j--)
    {
    cout<<*(s.V+j)<<endl;
    }
    }
    }
    }
    int main()
    {
    DblStack h;
    int a,b,c,d,e,f,g;
    InitStack(h,6);
    Dblpush(h,1,0);
    Dblpush(h,2,0);
    Dblpush(h,5,1);
    Dblpush(h,6,1);
    print(h,0);
    cout<<endl;
    print(h,1);
    Dblpop(h,0,b);
    Dblpop(h,1,e);
    cout<<endl;
    print(h,0);
    cout<<"第二个"<<endl;
    print(h,1);
    }

     

  • 相关阅读:
    1063. Set Similarity
    A1047. Student List for Course
    A1039. Course List for Student
    最大公约数、素数、分数运算、超长整数计算总结
    A1024. Palindromic Number
    A1023. Have Fun with Numbers
    A1059. Prime Factors
    A1096. Consecutive Factors
    A1078. Hashing
    A1015. Reversible Primes
  • 原文地址:https://www.cnblogs.com/huangmouren233/p/13805506.html
Copyright © 2011-2022 走看看