前端之家收集整理的这篇文章主要介绍了
【数据结构】链式栈的操作,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <stdio.h>
#include <malloc.h>
typedef int ElemType;
typedef struct LinkStack{
LinkStack *link;
ElemType elem;
}* PLinkStack;
void InitStack(PLinkStack L);
PLinkStack Push(PLinkStack L,ElemType i);
PLinkStack Pop(PLinkStack L);
void DestroyStack(PLinkStack L);
bool StackEmpty(PLinkStack L);
ElemType GetTop(PLinkStack L);
void StackTraverse(PLinkStack L);
void main()
{
PLinkStack L;
L = (PLinkStack)malloc(sizeof(LinkStack));
InitStack(L);
for (int i = 0; i < 5; i++)
{
L = Push(L,i*2+1);
}
StackTraverse(L);
L = Pop(L);
StackTraverse(L);
if (!StackEmpty(L))
printf("%d\n",GetTop(L));
DestroyStack(L);
}
void InitStack(PLinkStack L) // 建立一个空的链式栈
{
L->link = NULL;
}
PLinkStack Push(PLinkStack L,ElemType i)
{
PLinkStack P;
P = (PLinkStack)malloc(sizeof(LinkStack));
if (P == NULL)
{
printf("内存分配失败\n");
return NULL;
}
P->elem = i;
P->link = L;
L = P;
return L;
}
PLinkStack Pop(PLinkStack L)
{
PLinkStack P = L;
L = L->link;
free(P);
return L;
}
void DestroyStack(PLinkStack L)
{
if (L != NULL)
{
L->link = NULL;
free(L);
}
}
bool StackEmpty(PLinkStack L)
{
return (L==NULL && L->link == NULL); // true 为空; false 不为空
}
ElemType GetTop(PLinkStack L)
{
return L->elem;
}
void StackTraverse(PLinkStack L)
{
PLinkStack P = L;
while (P->link != NULL)
{
printf("%d\t",P->elem);
P = P->link;
}
printf("\n");
}