C语言实现栈链表

栈:​ 只有一个端口进入,元素先进后出FILO。

​ 而栈内存正是使用了这种结构管理内存,所以才叫栈内存。

基于这个,我们通过链表的形式来实现栈的一系列操作,如入栈、出栈、获取栈顶元素等。

//节点结构体定义
typedef struct Node
{
TYPE data;
struct Node* next;
}Node;

//链表定义
typedef struct StackList
{
Node* top; //栈顶元素指针
int cnt; //记录栈内元素数量
}StackList;

//创建链式桟的时候,我们使栈顶指针指向空,在后面通过栈顶指针是否为空来判断栈空
StackList* create_stack(void)
{
StackList* stack = malloc(sizeof(StackList));
stack->top = NULL;
stack->cnt = 0;
return stack;
}

#include
#include
#include
#define TYPE int

typedef struct Node
{
	TYPE data;
	struct Node* next;
}Node;

typedef struct StackList
{
	Node* top;
	int cnt;
}StackList;

//创建节点
Node* create_node(TYPE data)
{
	Node* node = malloc(sizeof(Node));
	node->data = data;
	node->next = NULL;
	return node;
}

//创建链式桟
StackList* create_stack(void)
{
	StackList* stack = malloc(sizeof(StackList));
	stack->top = NULL;
	stack->cnt = 0;
	return stack;
}
//桟空
bool empty_stack(StackList* stack)
{
	return NULL == stack->top; 
}
//入桟	头添加
void push_stack(StackList* stack,TYPE data)
{
	Node* node = create_node(data);
	node->next = stack->top;
	stack->top = node;
	stack->cnt++;
}
//出桟	头删除
bool pop_stack(StackList* stack)
{
	if(empty_stack(stack))
		return false;
	Node* node = stack->top;
	stack->top = node->next;
	stack->cnt--;
	free(node);
	return true;
}
//栈顶
TYPE top_stack(StackList* stack)
{
	return stack->top->data;
}
//清理链式桟
void clear_stack(StackList* stack)
{
	while(NULL!=stack->top)
	{
		pop_stack(stack);
	}
}
//销毁链式桟
void destroy_stack(StackList* stack)
{
	clear_stack(stack);
	free(stack);
}

int main(int argc,const char* argv[])
{
	StackList* stack = create_stack();
	for(int i=0; i<10; i++)
	{
		push_stack(stack,i);
		printf("入桟:Top:%d \n",top_stack(stack));
	}
	while(!empty_stack(stack))
	{
		printf("Top:%d ",top_stack(stack));
		printf("%s\n",pop_stack(stack)?"成功":"失败");
	}
	destroy_stack(stack);
}

你可能感兴趣的:(数据结构,链表,数据结构,指针,单链表,c语言)