// 链栈.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include "stdlib.h"
typedef int ElemType;
//创建链栈类型
typedef struct LinkNode
{
ElemType data;
struct LinkNode *next;
}StackNode;
typedef StackNode *LinkStack;//定义LinkStack为StackNode类型
//用来保存链表的头结点,并将其作为栈顶
typedef struct stack
{
StackNode *top;//头指针
int count;
}Stack;
//初始化链栈:头插法建立带头结点的链栈
Stack Init_LiStack(Stack &s)
{
s.top= (LinkStack)malloc(sizeof(StackNode));//创建头结点
s.top->next= NULL;
return s;
}
//判断栈是否为空:判断栈顶指针是否为空
bool Stack_Empty(Stack s)
{
if (s.top== NULL)
return true;
else
return false;
}
//入栈:
bool Push_LinkStack(Stack s,ElemType x)
{
LinkStack L;
L= (LinkStack)malloc(sizeof(StackNode));
L->data= x;
L->next=s.top->next;//将新结点插入栈顶
s.top->next =L;//将栈顶指针指向新结点
printf("进栈:%d\t", L->data);
return true;
}
bool Pop_LinkStack(Stack s)
{
if ((Stack_Empty(s))== true)
return false;
else
{
LinkStack L=s.top->next;
printf("出栈:%d\t",s.top->next->data);
s.top->next= L->next;
free(L);
}
return true;
}
int main()
{
Stack s;
ElemType data[7] = {1,5,7,4,6,9,3 };
s=Init_LiStack(s);
for (int i = 0;i < 7;i++)
{
Push_LinkStack(s,data[i]);
}
printf("\n");
for (int i = 0;i < 7;i++)
{
Pop_LinkStack(s);
}
return 0;
}