【複習】手寫數據結構之棧的鏈式存儲

#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;
		newNode->next = stack->head;
		stack->head = 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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章