顺序栈
- 定义栈的数据结构
typedef int ElemType;
#define MaxSize 10
typedef struct
{
ElemType data[MaxSize];
int top;
}SqStack;
- 初始化栈
void InitStack(SqStack*& s)
{
s = new SqStack;
s->top = -1;
}
- 销毁栈
void DestoryStack(SqStack* s)
{
delete s;
}
- 判断栈是否为空
bool StackEmpty(SqStack* s)
{
return ( s->top == -1);
}
- 进栈
bool Push(SqStack* s, ElemType e)
{
if (s->top == MaxSize - 1)
{
return false;
}
s->top++;
s->data[s->top] = e;
return true;
}
- 出栈
bool Pop(SqStack* s, ElemType& e)
{
if (s->top == -1)
return false;
e = s->data[s->top--];
return true;
}
- 取栈顶元素
bool GetTop(SqStack* s, ElemType& e)
{
if (s->top == -1) return false;
e = s->data[s->top];
return true;
}
- 测试代码
#include<iostream>
using namespace std;
typedef int ElemType;
#define MaxSize 10
typedef struct
{
ElemType data[MaxSize];
int top;
}SqStack;
//初始化栈
void InitStack(SqStack*& s)
{
s = new SqStack;
s->top = -1;
}
//销毁栈
void DestoryStack(SqStack* s)
{
delete s;
}
//判断栈是否为空
bool StackEmpty(SqStack* s)
{
return ( s->top == -1);
}
//进栈
bool Push(SqStack* s, ElemType e)
{
if (s->top == MaxSize - 1)
{
return false;
}
s->top++;
s->data[s->top] = e;
return true;
}
//出栈
bool Pop(SqStack* s, ElemType& e)
{
if (s->top == -1)
return false;
e = s->data[s->top--];
return true;
}
//取栈顶元素
bool GetTop(SqStack* s, ElemType& e)
{
if (s->top == -1) return false;
e = s->data[s->top];
return true;
}
int main()
{
SqStack* s = NULL;
InitStack(s);
Push(s, 10);
int e=0;
Push(s, 20);
Pop(s,e);
cout << e << endl;
GetTop(s, e);
cout << e << endl;
DestoryStack(s);
}
- 运行结果
链栈
- 定义链栈的数据结构
typedef int ELemType;
typedef struct linknode
{
ELemType data;
struct linknode* next;
}LinkStNode;
- 初始化栈
void InitStack(LinkStNode*& s)
{
s = new LinkStNode;
s->next = NULL;
}
- 销毁栈
void DestoryStack(LinkStNode* s)
{
LinkStNode* pre = s, * p = s->next;
while (p != NULL)
{
delete pre;
pre = p;
p = p->next;
}
delete pre;
}
- 判断栈是否为空
bool StackEmpty(LinkStNode* s)
{
return (s->next == NULL);
}
- 进栈
bool Push(LinkStNode* s, ELemType e)
{
LinkStNode* p=new LinkStNode;
p->data = e;
p->next = s->next;
s->next = p;
return true;
}
- 出栈
bool Pop(LinkStNode* s, ELemType& e)
{
LinkStNode* p=new LinkStNode;
if (s->next == NULL)
return false;
e = s->next->data;
p = s->next;
s->next = p->next;
delete p;
return true;
}
- 取栈顶元素
bool GetTop(LinkStNode* s, ELemType& e)
{
if (s->next != NULL)
e = s->next->data;
return false;
}
- 测试代码
#include<iostream>
using namespace std;
typedef int ELemType;
typedef struct linknode
{
ELemType data;
struct linknode* next;
}LinkStNode;
//初始化栈
void InitStack(LinkStNode*& s)
{
s = new LinkStNode;
s->next = NULL;
}
//销毁栈
void DestoryStack(LinkStNode* s)
{
LinkStNode* pre = s, * p = s->next;
while (p != NULL)
{
delete pre;
pre = p;
p = p->next;
}
delete pre;
}
//判断栈是否为空
bool StackEmpty(LinkStNode* s)
{
return (s->next == NULL);
}
//进栈(相当于头插)
bool Push(LinkStNode* s, ELemType e)
{
LinkStNode* p=new LinkStNode;
p->data = e;
p->next = s->next;
s->next = p;
return true;
}
//出栈
bool Pop(LinkStNode* s, ELemType& e)
{
LinkStNode* p=new LinkStNode;
if (s->next == NULL)
return false;
e = s->next->data;
p = s->next;
s->next = p->next;
delete p;
return true;
}
//取栈顶元素
bool GetTop(LinkStNode* s, ELemType& e)
{
if (s->next != NULL)
e = s->next->data;
return false;
}
int main()
{
LinkStNode* s = NULL;
int e;
InitStack(s);
Push(s, 10);
Push(s, 20);
Pop(s, e);
cout << e << endl;
GetTop(s, e);
cout << e << endl;
DestoryStack(s);
return 0;
}
- 运行结果