链栈的实现也是用单链表实现的:
.h 文件 链栈也采用企业链表的实现方式
#ifndef LINKSTACK_H
#define LINKSTACK_H
//定义链栈单元结构体
typedef struct LINKNODE
{
struct LINKNODE* next;
}LinkNode;
//定义链栈
typedef struct LINKSTACK
{
LinkNode head; //定义栈顶
int size;
}LinkStack;
//初始化链栈
LinkStack* Init_LinkStack();
//入栈
void Push_LinkStack(LinkStack* stack,LinkNode* data);
//弹栈
void Pop_LinkStack(LinkStack* stack);
//返回栈顶元素
LinkNode* Top_LinkStack(LinkStack* stack);
//返回栈元素的个数
int Size_LinkStack(LinkStack* stack);
//清空栈
void Clear_LinkStack(LinkStack* stack);
//销毁栈
void FreeSpace_LinkStack(LinkStack* stack);
#endif
.c 文件
#include<stdio.h>
#include<stdlib.h>
#include "LinkStack.h"
//初始化链栈
LinkStack* Init_LinkStack()
{
LinkStack* stack = (LinkStack*)malloc(sizeof(LinkStack));
stack->head.next = NULL;
stack->size = 0;
return stack;
}
//入栈
void Push_LinkStack(LinkStack* stack,LinkNode* data)
{
if(stack == NULL) return;
if(data == NULL) return;
data->next = stack->head.next;
stack->head.next = data;
stack->size++;
}
//弹栈
void Pop_LinkStack(LinkStack* stack)
{
if(stack == NULL) return;
if(stack->size == 0) return;
LinkNode* pDel = stack->head.next;
stack->head.next = pDel->next;
stack->size--;
}
//返回栈顶元素
LinkNode* Top_LinkStack(LinkStack* stack)
{
if(stack == NULL) return NULL;
if(stack->size == 0) return NULL;
return stack->head.next;
}
//返回栈元素的个数
int Size_LinkStack(LinkStack* stack)
{
if(stack == NULL) return -1;
return stack->size;
}
//清空栈
void Clear_LinkStack(LinkStack* stack)
{
if(stack == NULL) return;
stack->head.next = NULL;
stack->size = 0;
}
//销毁栈
void FreeSpace_LinkStack(LinkStack* stack)
{
if(stack == NULL) return;
free(stack);
}
int main()
{
return 0;
}