一、链式栈的基本操作
1、栈的创建。
2、栈的初始化。
3、入栈,出栈。
5、取得栈顶元素。
6、求栈的大小,判断栈是否为空。
二、代码:
//链式栈的基本操作
typedef struct LinkStack //创建链式栈
{
DataType data;
struct LinkStack *next;
}LinkStack;
void LinkStackInit(LinkStack *s)//栈的初始化
{
s = NULL;
}
void LinkStackPush(LinkStack** s, DataType x) //入栈
{
LinkStack *tmp = (LinkStack *)malloc(sizeof(LinkStack));
assert(tmp);
tmp->data = x;
tmp->next = *s;
*s = tmp;
}
void LinkStackPop(LinkStack** s) //出栈
{
LinkStack *tmp = *s;
if (*s)
{
*s = (*s)->next;
free(tmp);
tmp = NULL;
}
}
DataType LinkStackTop(LinkStack** s) //获取栈顶元素
{
if (*s)
{
return (*s)->data;
}
}
size_t LinkStackSize(LinkStack** s) //栈长
{
size_t lenth = 0;
if (*s)
{
LinkStack *tmp = *s;
while (tmp)
{
tmp = tmp->next;
lenth++;
}
return lenth;
}
}
int LinkStackEmpty(LinkStack* s) //判断是否是空栈
{
if (s)
{
return 1;
}
return 0;
}
三、链式栈相比于动态顺序栈,可以节省储存空间,出计算栈的大小链式栈需要遍历链表,其他操作效率相同。(最大优点是节省空间)