记录自已学习之堆栈(链表)
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;
}
和 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;
}
相关文章推荐
- 记录自已学习之单链表(头插)
- 记录自已学习之单链表(删除节点)
- 记录自已学习之单链表(遍历)
- 记录自已学习之单链表(尾插)
- 记录自已学习之单链表(逆序)
- 链表实现的堆栈程序(仅供自己学习使用)
- 学习记录——递归和堆栈
- 数据结构学习记录连载8(堆栈提高要求续)
- 记录自已学习工作中的一些心得
- 数据结构学习记录连载6(堆栈的学习续)
- 记录自已学习之面试题1
- 关于堆栈的些许面试题型的分析与实现 之 暑假学习记录
- 数据结构学习记录连载6(堆栈的学习续)
- 记录自已学习之单链表(创建)
- 牛客网算法学习记录-链表2
- 学习记录 java 链表知识
- 数据结构学习---堆栈的动态数组实现及链表实现
- 数据结构学习记录连载8(堆栈提高要求续)
- 数据结构学习记录连载5(堆栈的学习)
- Perl 学习记录3 基本构件的堆栈:列表与数组