C语言 栈的初始化,入栈,出栈,判断栈是否为空,清空栈等函数
#include <stdio.h>
#include <stdlib.h>
typedef struct Node
{
int data ;
struct Node * pNext;
}*PNODE ,NODE ;
typedef struct stack
{
PNODE pTop;
PNODE pBottom;
}*PSTACK ,STACK;
void init(PSTACK pS);
void push(PSTACK pS,int val);
void show(PSTACK pS);
bool is_empty(PSTACK pS);
bool pop(PSTACK pS,int * pVal);
void clear(PSTACK pS);
int main()
{
STACK S ;//定义了一个静态的栈,是程序员不能自己释放的
int val ;
init(&S);
push(&S,1);
push(&S,2);
push(&S,3);
push(&S,4);
show(&S);
if(pop(&S,&val))
{
printf("出栈成功,出栈的元素是:%d\n",val);
}
else printf("出栈失败!");
show(&S);
clear(&S);
show(&S);
}
void init(PSTACK pS)
{
pS->pTop = (PNODE)malloc(sizeof(NODE));
pS->pBottom =pS->pTop ;
pS->pTop->pNext = NULL ;
}
void push(PSTACK pS,int val)
{
PNODE pNew =(PNODE)malloc(sizeof(NODE));
pNew->data =val;
pNew->pNext =pS->pTop;
pS->pTop =pNew ;
}
void show(PSTACK pS)
{
PNODE p =pS->pTop ;
while(p!=pS->pBottom)
{
printf("%d ",p->data);
p=p->pNext ;
}
printf("\n");
}
bool is_empty(PSTACK pS)
{
if(pS->pTop==pS->pBottom)
return true ;
else return false ;
}
bool pop(PSTACK pS,int * pVal)
{
if(is_empty(pS))
{
return false ;
}
else
{
PNODE r = pS->pTop;
*pVal =r->data;
pS->pTop = r->pNext;
free(r);
r=NULL;
}
return true ;
}
void clear(PSTACK pS)
{
if(is_empty(pS))
{
return ;
}
else
{
PNODE p =pS->pTop;
PNODE q ;
while(q!=pS->pBottom)
{
q=p->pNext;
free(p);
p=q ;
}
}
pS->pTop=pS->pBottom;
}
C语言 栈的初始化,入栈,出栈,判断栈是否为空,清空栈等函数的更多相关文章
- 剑指offer-面试题22.栈的压入,弹出序列
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第 二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等. 例如序列1.2.3.4.5是某栈的压栈序列,序列4.5.3.2.1 是该压栈 ...
- 面试 16:栈的压入压出队列(剑指 Offer 第 22 题)
我们今天继续来看看周五留下的习题: 面试题:输入两个整数序列,第一个序列表示栈的压入顺序,请判断二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如:压入序列为{1,2,3,4,5},那{ ...
- 【剑指offer】栈的压入弹出序列,C++实现(举例)
原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为第一个序列的出栈序列.注意 ...
- 剑指offer21:第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。(注意:这两个序列的长度是相等的)
1 题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是 ...
- 剑指offer - 栈的压入弹出序列 - JavaScript
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列 1,2,3,4,5 是某栈的压入顺序,序列 4,5,3,2,1 ...
- 剑指Offer20 栈的压入弹出序列是否正确
/************************************************************************* > File Name: 20_IsPopO ...
- 剑指offer 栈的压入弹出 顺序
判断: 如果下一个弹出的数字刚好是栈顶元素,那么直接弹出 如果下一个弹出的数字不在栈顶,我们要把压栈序列中,还没有入栈的数字压入辅助栈,知道把下一个需要弹出的数字压入栈顶 如果所有的数字都入栈,但是仍 ...
- Go语言实现:【剑指offer】栈的压入、弹出序列
该题目来源于牛客网<剑指offer>专题. 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5 ...
- 【Java】 剑指offer(31) 栈的压入、弹出序列
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否 ...
随机推荐
- GPU体系架构(二):GPU存储体系
GPU是一个外围设备,本来是专门作为图形渲染使用的,但是随着其功能的越来越强大,GPU也逐渐成为继CPU之后的又一计算核心.但不同于CPU的架构设计,GPU的架构从一开始就更倾向于图形渲染和大规模数据 ...
- MySQL基础(6) | check约束
MySQL基础(6) | check约束 前言 在一些情况下,我们需要字段在指定范围的输入, 例如:性别只能输入 '男'或者'女',余额只能大于0等条件, 我们除了在程序上控制以外,我们还能使用 CH ...
- c 指针改变数字
之前已经有了: gcc -c day4.c -Wall gcc -o day4.exe day4.o 所以才会有以下结果
- Pycharm每次新建工程都要重新安装相关库的解决办法
之前自己每次重建工程时,都不厌其烦的重新安装了第三方的库,直接在pycharm的terminal中利用pip安装,或者鼠标放在所需库的红色波浪线上 直接点击Install Package XXX 后面 ...
- 一些实用的GitHub项目
原文链接:http://www.louisvv.com/archives/2036.html 最近整理了一些在GitHub上比较热门的开源项目 关于GitHub,快速了解请戳这里 其中涵盖了:学习教程 ...
- Uva12169 扩展欧几里得模板
Uva12169(扩展欧几里得) 题意: 已知 $x_i=(a*x_{i-1}+b) mod 10001$,且告诉你 $x_1,x_3.........x_{2t-1}$, 让你求出其偶数列 解法: ...
- spring boot中通用应用程序属性
可以在application.properties文件内部application.yml,文件内部或命令行开关中指定各种属性.本附录提供了常见的Spring Boot属性列表以及对使用它们的基础类的引 ...
- 聊聊SNMP协议
注:博主 Chloneda:个人博客 | 博客园 | Github | Gitee | 知乎 本文源链接:https://www.cnblogs.com/chloneda/p/snmp-protoco ...
- Android9.0 Camera2 横屏问题修改记录
vendor\mediatek\proprietary\packages\apps 目录下有三份相机源码 分别是 Camera. Camera1. Camera2 通过查看 mk 发现通过 ifeq ...
- pyqt5-进度条控制
1.基于自定义类的方式 继承自QProgressBar类,然后重写timerEvent方法,当该组件设置定时器的时候,会自己处理定时的处理方法,完成相应的功能 from PyQt5.Qt import ...