栈的创建以及操作

1.我们可以手写一个栈,格式如下:

#include <bits/stdc++.h>

using namespace std;
#define intsize 1000


typedef struct//一个顺序表;
{
    int *base;//也可以看作为数组首地址;
    int *top;
    int stacksize;//栈的长度;
}sqstack;

int initstack(sqstack &s ,int m)//初始化栈
{
    s.base = new int[m];//分配内存空间;
    if(!s.base) return -1;//创建失败返回-1;
    s.top = s.base;
    s.stacksize = m;
    return 0;
}
void push(sqstack &s ,int n)//入栈
{
    *s.top++ = n;//s.top初始默认为零;
}

int pop(sqstack &s)
{
    return *--s.top;
}

int main()
{
    sqstack s;
    int t,n,m,k;
    char x;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d",&m,&n);
        initstack(s,m);
        while(n--)
        {
            getchar();
            x = getchar();
            if(x == 'P')
            {
                scanf("%d",&k);
                if(s.top-s.base<s.stacksize)
                {
                    push(s,k);
                }
                else
                {
                    printf("F\n");
                }
            }
            else if (x == 'A')
            {
                if(s.top==s.base)//栈顶等于栈尾时栈为空
                {
                    printf("E\n");
                }
                else
                {
                    cout << *(s.top-1) << endl;
                }
            }
            else if (x == 'O')
            {
                if(s.top==s.base)
                {
                    printf("E\n");
                }
                else
                {
                    cout << pop(s) <<endl;
                }
            }
        }
        cout << endl;
    }
    return 0;
}

2.也可以直接调用c++STL库中的来进行使用,代码如下:

#include<iostream>
#include<stack>
using namespace std;
int main(){
	stack<int>mys;//<>里面为你的栈中元素的数据类型,示例为整形,所以为<int>;
	mys.push(5);
	mys.push(3);
	mys.push(8);
	mys.push(4);
	mys.push(1);
	mys.push(2);
	mys.push(7);
	while(!mys.empty()){
		cout<<mys.top()<<" ";
		mys.pop();
	}
	cout<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/z_xindong/article/details/81283625