10-C++实现栈的常见操作

栈分为顺序栈和链栈,顺序栈用数组实现,因为栈的先进后出特性,一般只考虑顺序栈。


代码1(自己写的):

#include <iostream>
#include <stdio.h>
#define ERR -9999999
const int maxn = 1000;

using namespace std;

typedef struct Stack{
    int data[maxn];
    int top;        //top指的是下一个要放入的元素位置
}Stack;

bool Is_empty(Stack &s) //判断栈是否为空
{
    if(s.top == 1) return 0;
    else return 1;
}

void top(Stack &s)      //获取栈顶元素
{
    int x = 0;
    if(!Is_empty(s)) printf("NO element!\n");
    else
        {
            x = s.data[s.top-1];
            printf("top = %d",x);
        }
}

void pop(Stack &s)      //弹出或删除栈顶元素
{
    int x;
    if(!Is_empty(s)) printf("EMPTY!\n");
    else
    {
        x = s.data[s.top--];
        printf("pop is = %d",x);
    }
}

void push(Stack &s,int x)    //压入一个元素为x
{
    if(s.top>(maxn-1)) printf("FULL!");
    else
    {
        s.data[s.top++] = x;
    }
}

int main()
{
    Stack st;
    st.top = 1;     //当前栈为空
    int X;      //X为每次读入的值
    int n=5;      //n为输入元素的个数
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&X);
        push(st,X);
    }
    pop(st);
    top(st);

    return 0;
}

代码2(西交wrong):

#include <iostream>
#include <stdio.h>
const int maxn = 1000;

typedef struct Stack{
    int st[maxn];
    int top;
}Stack;

Stack s;


bool IS_empty(){                //判断栈是否为空
    if(s.top <= 1) return 1;
    return 0;
}

bool pop(){                     //出栈操作
    if(s.top <= 1) return 0;
    s.top--;
    return 1;
}

bool push(int x){               //入栈操作
    if(s.top > (maxn-1)) return 0;
    s.st[s.top++] = x;
    return 1;
}

int top(){                     //获得栈顶元素
    if(s.top <= 1) return 0;
    return s.st[s.top-1];
}

int main()
{
    int n;                      //n为操作个数
    char op[10];                //判断输入操作
    int ret;                    //ret保存返回值
    s.top = 1;                  //栈初始化为空
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%s",&op);
        if(op[0] == 't')
            {
                ret = top();
                if(ret != 0)
                    printf("top is %d\n",ret);
                else
                    printf("top isn't exist\n");
            }
            else if(op[0] == 'p' && op[1] == 'o')
            {
                ret =pop();
                if(ret) printf("success pop\n");
                else printf("fail pop\n");
            }
            else if((op[0] == 'p') && (op[1] == 'u'))
            {
                int x;
                scanf("%d",&x);
                ret = push(x);
                if(ret) printf("success push\n");
                else printf("fail push\n");
            }
            else
            {
                ret = IS_empty();
                if(ret) printf("YES\n");
                else printf("NO\n");
            }
    }
/*直接用stack实现
    stack<int> st2;
    st2.push(1);
    int x = st2.top();    //注意此时x保存的是值,pop改变的是指针,所以下面pop后并没有改变x的值
    st2.pop();
    cout<<x<<endl;
*/
    return 0;
}

(感谢西交wrong学长提供以上题目练习)

猜你喜欢

转载自blog.csdn.net/outer_star/article/details/81951277