#include <stdio.h>
#include <stdlib.h>
typedef struct LINKNODE
{
void* data;
struct LINKNODE* next;
} LinkNode;
typedef struct LINKSTACK
{
LinkNode* head;
LinkNode* rearNode;
int size;
}LinkStack;
typedef struct STUDENT
{
char name[64];
int age;
int score;
} student;
//棧的初始化
void* init_linkStack()
{
LinkStack* stack = (LinkStack*)malloc(sizeof(LinkStack));
//stack->node.next = NULL;
stack->head = (LinkNode*)malloc(sizeof(LinkNode));
stack->head->next = NULL;
stack->rearNode = stack->head;
stack->size = 0;
}
//入棧
void pushBack_LinkStack(LinkStack* stack, void* data)
{
if (stack == NULL)
return;
if (data == NULL)
return;
if (stack->size == 0)
{
LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
stack->head->data = data;
stack->size++;
}
else
{
LinkNode* newNode = (LinkNode*)malloc(sizeof(LinkNode));
newNode->data = data;
stack->rearNode->next = newNode;
stack->rearNode = newNode;
stack->size++;
}
}
//返回棧頂元素;
void* top_SeqStack(LinkStack* stack)
{
if (stack == NULL)
return NULL;
return stack->head->data;
}
//出棧
void* pop_LinkStack(LinkStack* stack)
{
LinkNode* tempNode = NULL;
if (stack == NULL)
return NULL;
if (stack->size == 0)
return NULL;
tempNode = stack->head;
stack->head = stack->head->next;
stack->size--;
return tempNode->data;
}
//返回棧頂元素;
void* top_linkStack(LinkStack* stack)
{
return stack->head->data;
}
destorySpace_SeqStack(LinkStack* stack)
{
if (stack != NULL)
{
free(stack);
stack = NULL;
}
}
void main()
{
LinkStack* stack = init_linkStack();
student sd1 = { "zhang3", 23, 80 };
student sd2 = { "zhang4", 18, 100 };
student sd3 = { "zhang5", 20, 90 };
printf("---------測試入棧-----------\n");
pushBack_LinkStack(stack, &sd1);
pushBack_LinkStack(stack, &sd2);
pushBack_LinkStack(stack, &sd3);
student* testSd = pop_LinkStack(stack);
printf("---------測試出棧-----------\n");
printf("我叫%s,今年%d歲了,考了%d分\n", testSd->name, testSd->age, testSd->score);
student* testSd2 = pop_LinkStack(stack);
printf("我叫%s,今年%d歲了,考了%d分\n", testSd2->name, testSd2->age, testSd2->score);
printf("---------測試返回棧頂-----------\n");
student* testSd3 = top_linkStack(stack);
printf("我叫%s,今年%d歲了,考了%d分\n", testSd3->name, testSd3->age, testSd3->score);
destorySpace_SeqStack(stack);
system("pause");
return 0;
}