源代码在博客里可下载,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函数调用,读者可以根据自己的需求调用不用函数