系列文章目录
第一章 线性表的顺序存储结构的实现(C语言版)
第二章 线性表的链式存储结构的实现(C语言版)
第三章 栈的顺序存储结构的实现(C语言版
文章目录
前言
这篇更新栈的链式存储结构的实现,预告:之后会发一篇关于Linux更改root密码的博客
提示:以下是本篇文章正文内容,下面案例可供参考
一、栈的链式存储结构的实现
1.实现所需要的函数
void InitStack(LinkStack linkStack);
Status StackEmpty(LinkStack linkStack);
Status PushStack(LinkStack *linkStack, int elem);
Status PopStack(LinkStack *linkStack,int *elem);
Status GetTop(LinkStack linkStack);
2.常量定义
typedef int Status;
#define OK 0;
#define ERROR 1;
#define OVERFLOW -1;
#define TRUE 1;
#define FALSE 0;
#define MAX 10;
3.定义结构体
typedef struct LinkStack{
int data;
struct LinkStack *next;
}LinkNode,*LinkStack;
4.实现
4.1链栈的初始化
void InitStack(LinkStack linkStack){
//不需要头节点
//通过头指针指向栈顶即可
linkStack = NULL;
return OK;
}
4.2判断链栈是否为空
Status StackEmpty(LinkStack linkStack){
//如果栈顶元素为空,栈为空
if(!linkStack)
return FALSE;
return TRUE;
}
4.3 链栈的入栈/压栈
Status PushStack(LinkStack *linkStack, int elem){
//压栈
LinkNode *linkNode = (LinkNode *)malloc(sizeof(LinkNode));
(*linkNode).data = elem;
虽然是next,实质上栈指的是它的上一个元素的位置
(*linkNode).next = *linkStack;
*linkStack = linkNode;
return OK;
}
4.4链栈的出栈/弹栈
Status PopStack(LinkStack *linkStack,int *elem){
//出栈
//栈顶没有元素
if(*linkStack == NULL)
return ERROR;
*elem = (*linkStack)->data;
(*linkStack) = (*linkStack)->next;
return OK;
}
4.5获取栈顶元素
Status GetTop(LinkStack linkStack){
//获取栈顶元素
if(linkStack != NULL)
return (*linkStack).data;
}
总结
链栈的优点:不需要一块连续的空间,插入删除数据更快