记录自已学习之堆栈(链表)

前面我已经写过了关于单链表的操作了,现在我们就来深入一下,开始利用链表来做一些结构吧。看见题目,都知道我现在要写的是堆栈的结构。堆栈,就是一个后进先出(last in frist out)(LIFO)的一种数据类型。 我有一个比较好的比喻方式,也就是把堆栈比喻成一个一车道的停车场,先进去的最后才出来,因为它先进去的,而最后一辆车排到那里,必须等到最后一辆车开出来,然后接着到倒数第二辆车开出来,直到第一辆进去的车,它是最后出来的。关于堆栈有两个操作(push 和 pop):(1)push就是用于把一个新值压入堆栈顶部(2)pop就是把堆栈顶部的值弹出这个堆栈并返回。新加了一个函数top就是返回栈顶的数,以确认是否创建堆栈成功。

//关于堆栈的链表实现方法
#include <stdio.h>
#include <stdlib.h>


//定义一个结构体
typedef struct stack_node
{
int node;
struct stack_node *pNext;
}Stacknode;


//定义一个静态全局变量,在我的博客里面有写static的用法
static Stacknode *pCur;


//首先就是push操作,称为压栈操作
void push(int figure);


//后面的是pop操作,称为弹栈操作
void pop(void);


//检查栈顶的数
int top(void);


//主函数实现堆栈的功能
int main(void)
{
push(1);
push(2);
push(3);
push(4);
printf("Start = %d\n", top());
pop();
printf("End = %d\n", top());
pop();
printf("End2 = %d\n", top());
return 0;
}


//首先就是push操作,称为压栈操作
void push(int figure)
{
Stacknode *pNow = NULL;
//这条语句为了是申请内存,关于这部分我会在后面的博客中提出来。
pNow = (Stacknode *)malloc(sizeof(struct stack_node));
if (NULL == pNow) //一般都需要检查是否创建成功
{
printf("malloc failure\n");
return ;
}
//判断是否为第一个节点
if (NULL == pCur)
{
pNow->node = figure;
pNow->pNext = NULL;
}
else
{
pNow->node = figure;
pNow->pNext = pCur;
}
pCur = pNow;
}


//后面的是pop操作,称为弹栈操作
void pop(void)
{
Stacknode *pNow = pCur;
if (NULL == pCur)
{
return ;
}
else
{
pCur = pNow->pNext;
free(pNow);
}
}


//检查栈顶的数,返回栈顶的数。
int top(void)
{
if (NULL == pCur)
{
return -1;
}

return pCur->node;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值