只把学习的代码与各位分享一下:
定义头文件LinkStack.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);
//返回栈顶元素
LinkNode* Top_LinkStack(LinkStack* stack);
//出栈
void Pop_LinkStack(LinkStack* stack);
//判断是否为空
int IsEmpty(LinkStack* stack);
//返回栈中元素的个数
int Size_LinkStack(LinkStack* stack);
//销毁
void FreeSpace_LinkStack(LinkStack* stack);
//清空栈
void Clear_LinkStack(LinkStack* stack);
#endif
在LinkStack.cpp文件中实现函数
#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++;
}
//返回栈顶元素
LinkNode* Top_LinkStack(LinkStack* stack)
{
if(stack==NULL)
return NULL;
return stack->head.next;
}
//出栈
void Pop_LinkStack(LinkStack* stack)
{
if(stack->size==NULL)
return;
if(stack==NULL)
return;
//出栈即是删除栈顶元素,即将头结点的下个结点指向下个结点
LinkNode* pNext=stack->head.next;
stack->head.next=pNext->next;
stack->size--;
}
//判断是否为空
int IsEmpty(LinkStack* stack)
{
if(stack==NULL)
{
return -1;
}
if(stack->size==NULL)
return 1;
return 0;
}
//返回栈中元素的个数
int Size_LinkStack(LinkStack* stack)
{
if(stack==NULL)
{
return 0;
}
return stack->size;
}
//销毁
void FreeSpace_LinkStack(LinkStack* stack)
{
if(stack)
{
free(stack);
}
}
//清空栈
void Clear_LinkStack(LinkStack* stack)
{
stack->head.next=NULL;
stack->size=0;
}
最后在主函数测试该源代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"LinkStack.h"
typedef struct PERSON
{
LinkNode node;
char name[64];
int age;
}Person;
int main()
{
//创建栈以及数据
LinkStack* stack=Init_LinkStack();
Person p1,p2,p3,p4,p5;
strcpy_s(p1.name,"aaa");
strcpy_s(p2.name,"bbb");
strcpy_s(p3.name,"ccc");
strcpy_s(p4.name,"ddd");
strcpy_s(p5.name,"eee");
p1.age=10;
p2.age=20;
p3.age=30;
p4.age=40;
p5.age=50;
//入栈
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* person=(Person*)Top_LinkStack(stack);
printf("Name:%s Age:%d\n",person->name,person->age);
//出栈
Pop_LinkStack(stack);
}
//Clear_LinkStack(stack);
FreeSpace_LinkStack(stack);
return 0;
}
代码测试中出现了崩溃,实在累了,各位大神自行找出吧O(∩_∩)O哈哈(隔一天找到了 哈哈 果然还是的休息)!