目录
预先要引用的头文件以及宏定义
#include<stdio.h>
#include<iostream>
using namespace std;
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -1
typedef int ElemType;
typedef int Status;
所使用栈的结构
typedef struct LSNode {
ElemType data;
struct LSNode* next;
}LSNode,*LStack;
其基本操作接口
void InitStack_LS(LStack& S); //初始化链栈
void DestroyStack_LS(LStack& S); //销毁链栈
Status StackEmpty_LS(LStack S); //判断栈是否为空,空返回TRUE,否则返回FALSE
Status Push_LS(LStack& S, ElemType e); //元素e压入栈
Status Pop_LS(LStack& S, ElemType& e); //栈S的栈顶元素出栈并用e返回
Status GetTop_LS(LStack S, ElemType& e); //取栈S的栈顶元素,并用e返回
初始化链栈
void InitStack_LS(LStack& S)
{
S = NULL;
}
销毁链栈
void DestroyStack_LS(LStack& S)
{
LSNode* p, * q;
if (S != NULL)
{
q = S;
p = S->next;
free(S);
while (p != NULL)
{
q = p;
p = p->next;
free(q);
}
}
}
判断栈是否为空,空返回TRUE,否则返回FALSE
Status StackEmpty_LS(LStack S)
{
if (S == NULL)
{
return TRUE;
}
else
{
return FALSE;
}
}
元素e压入栈(入栈)
Status Push_LS(LStack& S, ElemType e)
{
LSNode* t;
t = (LSNode*)malloc(sizeof(LSNode));
if (t == NULL)
{
return OVERFLOW;
}
else
{
t->data = e;
t->next = S;
S = t;
return OK;
}
}
栈S的栈顶元素出栈并用e返回(出栈)
Status Pop_LS(LStack& S, ElemType& e)
{
LSNode* t;
if (S == NULL)
{
return ERROR;
}
else
{
t = S;
e = S->data;
S = S->next;
free(t);
return OK;
}
}
取栈S的栈顶元素,并用e返回
Status GetTop_LS(LStack S, ElemType& e)
{
if (S == NULL)
{
return ERROR;
}
else
{
e = S->data;
return OK;
}
}
一些接口的测试
int main()
{
//链栈
LStack S;
InitStack_LS(S);//初始化栈
int k = 0;
for (int i = 0; i < 7; i++)//入栈
{
Push_LS(S, k);
k++;
}
cout << S->data << endl;
ElemType e;
GetTop_LS(S, e);//取得栈顶元素
cout << e << endl;
for (int i = 0; i < 9; i++)//出栈
{
ElemType e1 = 0;
Pop_LS(S, e1);
cout << e1;
}
}