数据结构之链式栈

直接上代码。
.h文件,结构体的创建,函数的声明。

#ifndef LINKSTACK_H
#define LINKSTACK_H
#include 
#include 
//链式栈结点 
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 Free_LinkStack(LinkStack* stack); 
#endif

.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 || data == NULL){
		return;
	}
	data->next = stack->head.next ;  //data为LinkNode*类型 
	stack->head.next = data;
	stack->size ++;
}
//出栈
void Pop_LinkStack(LinkStack* stack){
	if(stack == NULL){
		return;
	} 
	if(stack->size == 0){  //否则pnext->next没有 
		return;
	}
	LinkNode* pnext = stack->head.next ;
	stack->head.next = pnext->next ;
	stack->size --;
}
//返回栈顶元素
LinkNode* Top_LinkStack(LinkStack* stack){
	if(stack == NULL){
		return NULL;
	}
	return stack->head.next ;
}
//返回栈元素个数
int Size_LinkStack(LinkStack* stack){
	if(stack == NULL){
		return -1;
	}
	if(stack->size == 0){
		return -1;
	}
	return stack->size ; 
}
//清空栈
void Clear_LinkStack(LinkStack* stack){
	if(stack == NULL){
		return;
	}
	stack->head.next = NULL;
	stack->size = 0;
}
//销毁栈
void Free_LinkStack(LinkStack* stack){
	if(stack == NULL){
		return;
	}
	free(stack);
}

main函数。

#include 
#include 
#include
#include"LinkStack.h"
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
typedef struct PERSON{
	LinkNode* node;
	char name[64];
	int age;
}Person;
int main(int argc, char *argv[]) {
	//创建
	LinkStack* stack = Init_LinkStack();
	//创建数据
//	Person p1 = {"aa",12};   //不能用这种形式,我分析应该是PERSON结构体中的第一个元素是 LinkNode* node。 
//	Person p2 = {"bb",13};     如果采用此种方式赋值,会赋值给前两个元素 
//	Person p3 = {"cc",14};
	Person p1,p2,p3;
	strcpy(p1.name,"aa"); 
	strcpy(p2.name,"bb"); 
	strcpy(p3.name,"cc"); 
	p1.age = 10;
	p2.age = 20;
	p3.age = 30;
	//入栈
	Push_LinkStack(stack,(LinkNode*)&p1);
	Push_LinkStack(stack,(LinkNode*)&p2);
	Push_LinkStack(stack,(LinkNode*)&p3); 
	//打印
	while(Size_LinkStack(stack) > 0){
		Person* p = (Person*)Top_LinkStack(stack);
		printf("name: %s age: %d\n",p->name ,p->age );
		Pop_LinkStack(stack);
	}
	Free_LinkStack(stack);
	return 0;
}

测试结果。
数据结构之链式栈_第1张图片

你可能感兴趣的:(数据结构之链式栈)