直接上图:
代码:
Linkstack.h源文件:
#include<stdio.h>
typedef int ElemType1;
typedef struct StackNode
{
ElemType1 data;
struct StackNode * pNext;
}StackNode,*LinkStackPtr;
typedef struct LinkStack
{
LinkStackPtr top;//栈顶指针
int count;//栈中节点个数
}LinkStack;
void initLinkStack(LinkStack * LS);
void push(LinkStack * LS, ElemType1 e);//进栈
ElemType1 pop(LinkStack * LS);//出栈
ElemType1 getTop(LinkStack * LS);//获取栈顶元素
void printLinkStack(LinkStack * LS);//打印链式栈
LinkStack.c源文件:
#include"LinkStack.h"
void initLinkStack(LinkStack * LS)
{
LS->top = NULL;
LS->count = 0;
}
void push(LinkStack * LS, ElemType1 e)//进栈
{
StackNode * newNode = (StackNode *)malloc(sizeof(StackNode));//分配新节点
newNode->pNext = LS->top;
LS->top = newNode;
newNode->data = e;
LS->count++;
}
void printLinkStack(LinkStack * LS)//打印链式栈
{
if (LS->top == NULL)
{
printf("链式栈已空!\n");
return;
}
printf("从栈顶开始打印:\n");
StackNode pLS = *(LS->top);//记录栈顶节点位置
while (pLS.pNext != NULL)
{
printf("data:%d\n", pLS.data);
pLS = *(pLS.pNext);
}
printf("data:%d\n", pLS.data);
}
ElemType1 getTop(LinkStack * LS)//获取栈顶元素
{
return LS->top->data;
}
int isEmpty(LinkStack * LS)//判空
{
if (LS->top == NULL && LS->count == 0)
return 1;
else
return 0;
}
ElemType1 pop(LinkStack * LS)//出栈
{
if (LS->top == NULL)
{
printf("链式栈已空!\n");
return;
}
StackNode * ptemp = LS->top;//记录栈顶节点
LS->top = LS->top->pNext;//栈顶指针下移
LS->count--;
ElemType1 temp = ptemp->data;
free(ptemp);
return temp;
}