10-C++實現棧的常見操作

outer_star發表於2018-08-22

棧分為順序棧和鏈棧,順序棧用陣列實現,因為棧的先進後出特性,一般只考慮順序棧。


程式碼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學長提供以上題目練習)

相關文章