ywrby

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

栈的链式存储

头文件: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;
}
posted on 2020-03-04 08:10  ywrby  阅读(143)  评论(0)    收藏  举报