1.0 头文件
#pragma once
typedef int elemType;
// 链式栈 的一个元素
typedef struct LinkStatckNode
{
elemType data;
struct LinkStatckNode* nextNode;
}LinkStatckNode,*LinkStatckNodePtr;
// 栈的结构体
typedef struct LinkStatckPtr
{
// 栈顶指针
LinkStatckNodePtr top;
// 栈的长度
int length;
}LinkStatckPtr;
// 初始化栈
void initLinkStack(LinkStatckPtr** s);
// 压入一个元素
void pushLinkStack(LinkStatckPtr* s, elemType e);
// 弹出一个元素
void popLinkStack(LinkStatckPtr* s, elemType* e);
// 获取栈顶元素
void getTopLinkStatk(LinkStatckPtr* s, elemType* e);
// 获取栈的长度
int getLinkStatkLength(LinkStatckPtr* s);
// 判断栈是不是为空
bool isEmptyLinkStatk(LinkStatckPtr* s);
2.0 源文件
#include "LinkStatck.h"
#include<stdio.h>
#include<stdlib.h>
// 初始化栈
void initLinkStack(LinkStatckPtr** s)
{
// 1.0 生成头指针
*(s) = (LinkStatckPtr* )malloc(sizeof(LinkStatckPtr));
if (!(*s))
{
exit(-1);
return;
}
(*(s))->top = NULL;
(*(s))->length = 0;
}
// 压入一个元素
void pushLinkStack(LinkStatckPtr* s, elemType e)
{
//1.0 生成一个节点
LinkStatckNode* node = (LinkStatckNodePtr)malloc(sizeof(LinkStatckNode));
if (!node)
{
return;
}
// 赋值新节点的数据
node->data = e;
node->nextNode = NULL;
s->length = s->length + 1;
// s->top = node;
// 分两种情况 栈是空的
if (s->top == NULL)
{
s->top = node;
}
else
{
// 这两句不好理解可以画图,一图胜千言
node->nextNode = s->top;
s->top = node;
}
}
// 弹出一个元素
void popLinkStack(LinkStatckPtr* s, elemType* e)
{
if (s->top == NULL)
{
*e = -1;
return;
}
// 先获取 top 指针指向的节点
LinkStatckNodePtr node = s->top;
*e = node->data;
s->top = s->top->nextNode;
s->length = s->length - 1;
free(node);
}
// 获取栈顶元素
void getTopLinkStatk(LinkStatckPtr* s, elemType* e)
{
if (s->top == NULL)
{
*e = -1;
}
*e = s->top->data;
}
// 获取栈的长度
int getLinkStatkLength(LinkStatckPtr* s)
{
return s->length;
}
// 判断栈是不是为空
bool isEmptyLinkStatk(LinkStatckPtr* s)
{
if (s != NULL)
{
return (s->length == 0 || s->top == NULL);
}
else
{
return true;
}
}
3.0 测试文件
/*
* 测试 文件
*/
#include<stdio.h>
#include"LinkStatck.h"
int main(int argc, char* argv[])
{
printf("Hello World! Stack\n");
LinkStatckPtr* s;
initLinkStack(&s);
pushLinkStack(s, 100);
pushLinkStack(s, 101);
pushLinkStack(s, 102);
int e;
popLinkStack(s, &e);
printf("popLinkStack %d \n", e);
popLinkStack(s, &e);
printf("popLinkStack %d \n", e);
getTopLinkStatk(s, &e);
printf("popLinkStack %d \n", e);
popLinkStack(s, &e);
printf("popLinkStack %d \n", e);
popLinkStack(s, &e);
printf("popLinkStack %d \n", e);
return 0;
}