提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、链栈概念
“链式栈是一种数据存储结构,可以通过单链表的方式来实现,使用链式栈的优点在于它能够克服用数组实现的顺序栈空间利用率不高的特点,但是需要为每个栈元素分配额外的指针空间用来存放指针域。
二、接口实现
typedef int ElemType;
typedef struct LinkStack {
ElemType data;
struct LinkStack* next;
}LinkStack;
void InitStack(LinkStack*& s)
{
s = (LinkStack*)malloc(sizeof(LinkStack));
s->next = NULL;
}
3.判断栈是否为空:StackEmpty
bool StackEmpty(LinkStack* s)
{
return (s->next == NULL);
}
4.销毁栈:DestroyStack
void DestroyStack(LinkStack*& s)
{
LinkStack* pre = s, * p = s->next;
while (p != NULL)
{
free(pre);
pre = p;
p = p->next;
}
free(pre);
}
5. 入栈:Push
void Push(LinkStack*& s, ElemType e)
{
LinkStack* p;
p = (LinkStack*)malloc(sizeof(LinkStack));
p->data = e;
p->next = s->next;
s->next = p;
}
6.出栈:Pop
bool Pop(LinkStack*& s,ElemType &e)
{
LinkStack* p;
if (s->next == NULL)
{
return false;
}
p = s->next;
e = p->data;
s->next = p->next;
free(p);
return true;
}
7.获取栈顶:GetTop
bool GetTop(LinkStack* s,ElemType &e)
{
if (s->next == NULL)
return false;
e = s->next->data;
return true;
}
8.完整代码
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LinkNode {
ElemType data;
struct LinkNode* next;
}LinkStack;
void InitStack(LinkStack*& s)
{
s = (LinkStack*)malloc(sizeof(LinkStack));
s->next=NULL;
}
void DestroyStack(LinkStack*& s)
{
LinkStack* p = s->next,*pre=s;
while (p!=NULL)
{
free(pre);
pre = p;
p = p->next;
}
free(pre);
}
bool StackEmpty(LinkStack* s)
{
return s->next == NULL;
}
void Push(LinkStack*& s, ElemType e)
{
LinkStack* p;
p = (LinkStack*)malloc(sizeof(LinkStack));
p->data = e;
p->next = s->next;
s->next = p;
}
bool Pop(LinkStack*& s, ElemType& e)
{
LinkStack* p;
if (s->next == NULL)
return false;
p = s->next;
e = p->data;
s->next = p->next;
free(p);
return true;
}
bool GetTop(LinkStack* s, ElemType& e)
{
if (s->next == NULL)
return false;
e = s->next->data;
return true;
}
int main()
{
LinkStack* s;
ElemType e;
InitStack(s);
printf("%d\n", StackEmpty(s));
Push(s, 4);
Push(s, 5);
Push(s, 6);
printf("%d\n", StackEmpty(s));
GetTop(s, e);
printf("栈顶为:%d\n", e);
Pop(s, e);
printf("%d\n", e);
Pop(s, e);
printf("%d\n", e);
Pop(s, e);
printf("%d\n", e);
DestroyStack(s);
return 0;
}
总结
以上就是数据结构链栈的内容,本文仅仅简单介绍了链栈接口的实现,如果以上有问题,请大神指正,和同学们一起学习进步。