栈一共有两种储存结构
1.顺序栈
2.链栈
链栈
链栈也是一种链表,它与一般链表的不同之处就在于仅仅只在表尾插入/输出。
所以我们定义一个结点,结点包含value储存要保存的数值,指针next,指向一下个结点。
定义一个链表,包含top指针,指向最后输入的那个元素;还需要指针bottom,始终指向栈底;还可设置一个变量len,用来储存栈内元素的个数,当然不设置也可以,写一个GetLength()也可。
定义一个结点
typedef struct SNode {
ElemType value;
struct SNode *next;
}*SNode;
定义一个顺序栈
typedef struct Stack {
SNode top;
SNode bottom;
int len;
}*Stack;
基本操作
初始化栈
判空
输出栈
入栈
出栈
输出栈中元素个数
输出栈顶元素
//初始化链栈
void InitStack(Stack S)
{
S->top = (SNode)malloc(sizeof(SNode));
S->bottom = (SNode)malloc(sizeof