栈的简单实现-压栈出栈(C)

源代码在博客里可下载,1C币。或者找Q:1286550014

一、头文件导入

#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>

二、结构体的定义

//栈节点
typedef struct node
{
	int data;
	struct node* next;
}Node,*pNode;

//将栈顶点封装在一个结构体中
typedef struct Stack
{
	pNode top;
}Stack,*pStack;

三、功能函数的定义

//创建一个新节点,并连接新节点,并将节点指针返回
pNode createSatck(int data,pNode P);
//初始化栈
void InitStack(pStack p);
//判断当前栈是否为空
bool isEmpty(pStack p);
//压栈
void PushStack(int data, pStack p);
//出栈
void PopStack(pStack p);
//打印栈
void ShowStack(pStack p);

四、功能函数的依次实现

//创建一个新节点,并连接新节点,并将节点指针返回
pNode createSatck(int data,pNode p)
{
	//申请内存空间
	pNode pnew = (pNode)malloc(sizeof(Node));
	pnew->data = data;
	pnew->next = p;//将新节点的指针
	return pnew;
}

//初始化栈
void InitStack(pStack p)
{
	p->top = NULL;	//先将栈顶点初始化为NULL
}

//判断当前栈是否为空
bool isEmpty(pStack p)
{
	return p->top == NULL;//如果栈顶点为空,说明当前栈为空,返回true
}

//压栈
void PushStack(int data, pStack p)
{
	//压入栈,将旧顶点指针放入createStack函数中,并将新节点
	//变为新栈顶点,从而实现压栈操作
	p->top = createSatck(data, p->top);
}

//出栈
void PopStack(pStack p)
{
	if (!isEmpty(p))//先判断当前栈是否为空
	{
		pNode ptemp = p->top;//定义临时指针指向与久栈顶点
		p->top = p->top->next;//将栈顶点下移一位
		free(ptemp);//并释放掉旧栈顶点
	}
	else
	{
		printf("栈为空!\n");
	}
}

//打印栈
void ShowStack(pStack p)
{
	//循环打印
	for (pNode temp = p->top; temp; temp = temp->next)
	{
		printf("%d->", temp->data);
	}
	printf("\n");
}

五、栈的调用(main函数)

以下为我的main函数调用,读者可以根据自己的需求调用不用函数
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41453285/article/details/83153805