顺序栈
#include<bits/stdc++.h>
using namespace std;
# define MaxSize 1000
typedef struct {
int* data;//数据域,存放栈中元素
int top;//栈顶指针
}SqStack;
//初始化一个空栈
void InitStack(SqStack& S)
{
S.top = -1;
}
//判断是否为空
bool StackEmpty(SqStack S)
{
if (S.top == -1)
return true;
else
return false;
}
//进栈
bool Push(SqStack& S, int x)
{
if (S.top >= MaxSize - 1)
return false;
else {
S.top++;
S.data[S.top] = x;
return true;
}
}
//出栈
bool Pop(SqStack& S, int& x)
{
if (S.top == -1)
return false;
else {
x = S.data[S.top];
S.top--;
return true;
}
}
//读取栈顶元素
bool GetTop(SqStack S, int& x)
{
if (S.top == -1)
return false;
else {
x = S.data[S.top];
return true;
}
}
//销毁栈
void DestoryStack(SqStack& S)
{
free(S.data);
}
int main1()
{
SqStack Sq;
InitStack(Sq);
Sq.data = new int[MaxSize];
for (int i = 0; i < 9; i++)
{
Push(Sq, i + 2);
}
cout << "弹出栈顶元素" << endl;
int x;
GetTop(Sq, x);
cout << x << endl;
cout << "删除栈顶元素" << endl;
int i;
Pop(Sq, i);
cout << "删除完毕弹出栈顶元素" << endl;
GetTop(Sq, x);
cout << x << endl;
cout << "销毁栈" << endl;
DestoryStack(Sq);
return 0;
}
链栈
#include<bits/stdc++.h>
using namespace std;
typedef struct Linknode {
int data;//数据域
struct Linknode* next;//指针域
}Linknode, * LinkStack;
//不带头结点
//初始化,构造空栈
void InitStack(LinkStack& S)
{
S = NULL;
}
//判空
bool EmptyStack(LinkStack S)
{
if (S == NULL)
return true;
else
return false;
}
//进栈
bool Push(LinkStack& S, int x)
{
Linknode* s = new Linknode;
if (s == NULL)return false;
s->data = x;
s->next = S;
S = s;//头指针指向栈顶元素
}
//出栈
bool Pop(LinkStack& S, int& x)
{
if (S == NULL)
return false;
x = S->data;
//将头指针指向下一个节点,且释放原首节点。
Linknode* p = S;
S = S->next;
free(p);
}
//读取栈顶元素
bool GetTop(LinkStack S, int& i)
{
if (S == NULL) return false;
i = S->data;
}
int main()
{
LinkStack S;
InitStack(S);
for (int i = 0; i < 10; i++)
{
Push(S, i + 1);
}
int i;
GetTop(S, i);
cout << "栈顶元素为: " << i << endl;
Pop(S, i);
GetTop(S, i);
cout << "弹出栈顶元素之后的栈顶元素为: " << i << endl;
return 0;
}