##顺序栈
#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef int SElemType;
typedef struct
{
SElemType* base;
SElemType* top;
int stacksize;
}Sqstack;
int InitStack(Sqstack& S)
{
//初始化base作为数组控件存放数据,top指向第一个元素上面(当前初始化为空栈)
S.base = new SElemType[MAXSIZE];
if (!S.base) return 0;
S.top = S.base;
S.stacksize = MAXSIZE;
return 1;
}
int Push(Sqstack& S, SElemType e)
{
if (S.top - S.base == S.stacksize)return 0;
*(S.top++) = e;
return 1;
}
int Pop(Sqstack& S, SElemType& e)
{
if (S.top == S.base)return 0;
e = *(--S.top);
return 1;
}
SElemType GetTop(Sqstack S)
{
if (S.top != S.base)
return *(S.top - 1);
return 0;
}
int main()
{
Sqstack S;
SElemType e;
InitStack(S);
int n;
cout << "请输入入栈个数: ";
cin >> n;
cout << "请依次输入入栈的数据: " << endl;
for (int i = 0; i < n; i++)
{
cin >> e;
Push(S, e);
}
cout << "GetTop: ";
cout << GetTop(S) << endl;
cout << "Pop: " << endl;
for (int i = 0; i < n; i++)
{
Pop(S, e);
cout << e << endl;
}
return 0;
}
##链栈
#include <iostream>
using namespace std;
#define MAXSIZE 100
typedef int SElemType;
typedef struct StackNode
{
SElemType data;
struct StackNode* next;
}StackNode, * LinkStack;
int InitStack(LinkStack& S)
{
S = NULL;
return 1;
}
int Push(LinkStack& S, SElemType e)
{
//每次入栈的结点指向前一个结点
LinkStack p = new StackNode;
p->data = e;
p->next = S;
S = p;
return 1;
}
//删除S的栈顶元素,用e返回其值
int Pop(LinkStack& S, SElemType& e)
{
if (S == NULL)return 0;
e = S->data;
LinkStack p = S; //用p临时保存栈顶元素空间,以备释放
S = S->next;
delete p;
return 1;
}
SElemType GetTop(LinkStack S)
{
if (S != NULL)
return S->data;
return 0;
}
int main()
{
LinkStack S;
SElemType e;
InitStack(S);
int n;
cout << "请输入入栈个数: ";
cin >> n;
cout << "请依次输入入栈的数据: " << endl;
for (int i = 0; i < n; i++)
{
cin >> e;
Push(S, e);
}
cout << "GetTop: ";
cout << GetTop(S) << endl;
cout << "Pop: " << endl;
for (int i = 0; i < n; i++)
{
Pop(S, e);
cout << e << endl;
}
return 0;
}