用链式存储方式实现的栈
typedef struct Linknode{
ElemType data; //数据域
struct Linknode *next; //指针域
} *LiStack; //栈类型定义
基本操作
/**
* 使用链表这种数据结构实现栈
* @author five-five
* @created 2022/5/18
*
*/
#include "stdlib.h"
#include "stdio.h"
#include "stdbool.h"
typedef struct LinkNode {
int data; //数据域
struct LinkNode *next; //指针域
} *LiStack, LinkNode; //栈类型定义
/**
* 初始化操作
* @param stack 要初始化栈的指针的指针
* @return
*/
bool init(LiStack *stack) {
*stack = (LiStack) malloc(sizeof(LinkNode));
if (NULL == *stack) {
return false;
}
//头结点的data为-1,-1为特别标识
(*stack)->data = -1;
(*stack)->next = NULL;
return true;
}
/**
* 压栈操作
* @param stack 栈指针
* @param data 压入元素
* @return
*/
bool push(LiStack stack, int data) {
if (NULL == stack) {
return false;
}
//先做一个链表结点出来
LinkNode *cur = malloc(sizeof(LinkNode));
cur->data = data;
//开始换位
cur->next = stack->next;
stack->next = cur;
return true;
}
/**
* 出栈操作
* @param stack 栈指针
* @param e 用于接收出栈元素的指针
* @return
*/
bool pull(LiStack stack, int *e) {
if (stack == NULL||stack->next==NULL) {
return false;
}
//赋值操作
*e = stack->next->data;
//链表删除结点
LinkNode *next = stack->next;
stack->next = next->next;
return true;
}
int main() {
LiStack liStack;
int e = -1;
init(&liStack);
printf("%d\n", liStack->data);
pull(liStack, &e);
printf("%d\n", e);
push(liStack, 1);
pull(liStack, &e);
printf("%d\n", e);
push(liStack, 2);
push(liStack, 3);
pull(liStack, &e);
printf("%d\n", e);
pull(liStack, &e);
printf("%d\n", e);
pull(liStack, &e);
printf("%d\n", e);
return 1;
}