您的位置:首页 > 理论基础 > 数据结构算法

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

2017-04-28 18:22 260 查看
前面我已经写过了关于单链表的操作了,现在我们就来深入一下,开始利用链表来做一些结构吧。看见题目,都知道我现在要写的是堆栈的结构。堆栈,就是一个后进先出(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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 数据结构