系列文章目录
文章目录
前言
一、栈是什么?
栈(stack)又名堆栈,是一种限定仅在表尾进行插入和删除操作的线性表
这一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。
向一个栈插入新元素又称作进栈、入栈或压栈,使之成为新的栈顶元素
从一个栈删除元素又称作出栈或退栈。
二、栈的图示
2.1栈的结构(实现规则)以及我的理解
2.2如何创建一个栈(栈的初始化,以及结构体定义)
//1.节点结构体
typedef struct node
{
void* data;
struct node* next;
}node,*pnode;
//2.栈顶指针结构体
typedef struct
{
int size;
struct node* top;//指向栈顶的指针
}stack;
//初始化,放在main函数里面的
void stack_init(stack *s)
{
if (s == NULL)
{
return;
}
s->size = 0;
s->top = NULL;
}
三、栈的操作,入栈和出栈
2.2入栈图示,思路,代码
//入栈
void stack_push(stack *s,int data, const int size)
{
//创建新节点
node *pnew = (node *)malloc(sizeof(node));
pnew->data = data;
//原先栈顶指向的原栈顶节点赋给新节点next
pnew->next = s->top;
//把新节点赋给栈顶指针的top
s->top = pnew;
s->size++;
}
2.3出栈图示,思路,代码
//出栈
void stack_pop(stack *s)
{
//1.创建一个临时节点接收栈顶节点
node *ptemp = s->top;
//2.把原栈顶节点的下一个节点赋给栈顶指针,让栈顶指针指向原栈顶节点的下一个
s->top = s->top->next;
//3.释放原栈顶节点
free(ptemp);
//4.节点数减1
s->size--;
}