栈的链式存储

LinkStack.cpp

#include "LinkStack.h"
#include<stdio.h>
#include<stdlib.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++;
	return ;
}
//出栈
void Pop_LinkStack(LinkStack* stack){
	if (stack==NULL)
	{
		return;
	}
	if (stack->size==0)
	{
		return;
	}
	//第一个有效结点
	LinkNode*Pcurrent = stack->head.next;
	stack->head.next = Pcurrent->next;
	stack->size--;
	return;
}
//返回栈顶元素
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 Cleat_LinkStack(LinkStack*stack){
	if (stack == NULL)
	{
		return;
	}
	stack->head.next = NULL;
	stack->size = 0;
	return;
}
//销毁栈
void FreeSpace_LinkStack(LinkStack*stack){
	if (stack == NULL)
	{
		return;
	}
	free(stack);
	return;
}

LinkStack.h

#ifndef LINSTACK_H
#define LINSTACK_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 Cleat_LinkStack(LinkStack*stack);
//销毁栈
void FreeSpace_LinkStack(LinkStack*stack);

#endif

demo.cpp

#define _CRT_SECURE_NO_WARNINGS
#include "LinkStack.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct PERSON{
	LinkNode node;
	char name[64];
	int age;
}Person;
int main(void)
{

	LinkStack *stack = Init_LinkStack();
	Person p1, p2, p3, p4;
	strcpy(p1.name,"djashdj");
	strcpy(p2.name, "uuhfjhaj");
	strcpy(p3.name, "hadak");
	strcpy(p4.name, "aeqewe");
	p1.age = 6;
	p2.age = 8;
	p3.age = 30;
	p4.age = 20;
	Push_LinkStack(stack, (LinkNode*)&p1);
	Push_LinkStack(stack, (LinkNode*)&p2);
	Push_LinkStack(stack, (LinkNode*)&p3);
	Push_LinkStack(stack, (LinkNode*)&p4);
	while (stack->size>0)
	{
		Person *p = (Person*)Top_LinkStack(stack);
		printf("name:%s,age:%d\n", p->name, p->age);
		Pop_LinkStack(stack);
	}
	FreeSpace_LinkStack(stack);
	system("pause");
	return 0;
}

结果:通过
栈的链式存储