[C语言]-栈的链式存储

栈的链式存储

头文件:LinkStack.h


#ifndef LINKSTACK_H
#define LINKSTACK_H
#include<stdlib.h>
#include<stdio.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 // !LINKSTACK_H

实现文件:LinkStack.c

#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;
	}

	LinkStack* newHead = stack->head.next->next;
	stack->head.next = newHead;
	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) {
	return stack->size;
}
//清空栈
void Clear_LinkStack(LinkStack* stack) {
	if (stack == NULL) {
		return;
	}
	stack->head.next = 0;
	stack->size = 0;
}
//销毁栈
void FreeSpace_LinkStack(LinkStack* stack) {
	if (stack == NULL) {
		return;
	}
	free(stack);
}

主文件:Main.c

typedef struct PERSON_2 {
	LinkNode node;
	char name[64];
	int age;
}Person_2;



void LinkStackTest() {
	LinkStack* stack = Init_LinkStack();
	Person_2 p1, p2, p3, p4, p5;
	strcpy(p1.name, "Tom");
	strcpy(p2.name, "Bob");
	strcpy(p3.name, "Lili");
	strcpy(p4.name, "Jason");
	strcpy(p5.name, "Hugo");
	p1.age = 18;
	p2.age = 65;
	p3.age = 12;
	p4.age = 45;
	p5.age = 18;
	//入栈
	Push_LinkStack(stack, (LinkNode*)&p1);
	Push_LinkStack(stack, (LinkNode*)&p2);
	Push_LinkStack(stack, (LinkNode*)&p3);
	Push_LinkStack(stack, (LinkNode*)&p4);
	Push_LinkStack(stack, (LinkNode*)&p5);
	//输出
	while (Size_LinkStack(stack) > 0) {
		//取出栈内元素
		Person_2* p = (Person_2*)Top_LinkStack(stack);
		//输出内容
		printf("Name:%-8s,Age:%-8d\n", p->name, p->age);
		//去除栈顶元素
		Pop_LinkStack(stack);

	}
	FreeSpace_LinkStack(stack);
	
}
int main(){
    LinkStackTest();
    system("pause");
    return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值