C代码实现栈
# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
//C语言实现栈 //结点
typedef struct Node{
int data;//数据
struct Node* pNext;//指针
}* PNODE,NODE; //栈
typedef struct stack{
PNODE pTop;
PNODE pBottom;
}* PSTACK,STACK; void init(PSTACK s);
void push(PSTACK s,int num);
bool isEmpty(PSTACK s) ;
bool pop(PSTACK s) ;
void traverse(PSTACK s);
void clear(PSTACK s) ; int main(void)
{
STACK s;
init(&s);
if(isEmpty(&s)){
printf("栈为空\n");
}
//压栈
push(&s,);
push(&s,);
push(&s,);
push(&s,);
push(&s,);
push(&s,);
push(&s,);
//遍历
traverse(&s);
//出栈
if(pop(&s)){
printf("出栈成功\n");
}
else{
printf("出栈失败\n");
}
traverse(&s);
clear(&s);
if(isEmpty(&s)){
printf("栈为空\n");
}
return ;
} //初始化一个空栈
void init(PSTACK s)
{
s->pTop = (PNODE)malloc(sizeof(NODE));
//判断是否申请失败
if(NULL == s->pTop) {
printf("内存申请失败");
exit(-);
}
s->pBottom = s->pTop;
s->pBottom->pNext = NULL;
} //压栈
void push(PSTACK s,int num)
{
//申请一个临时结点
PNODE tem = (PNODE)malloc(sizeof(NODE));
tem->data = num;
tem->pNext = s->pTop;
s->pTop = tem;
} //判断栈是否为空
bool isEmpty(PSTACK s)
{
return s->pTop==s->pBottom;
} //出栈
bool pop(PSTACK s)
{
if(isEmpty(s)){
return false;
}
else{
PNODE tem = s->pTop;
s->pTop = tem->pNext;
free(tem);
tem = NULL;
return true;
}
} //遍历栈
void traverse(PSTACK s)
{
PNODE p = s->pTop;
while(p!=s->pBottom){
printf("%d ",p->data);
p = p->pNext;
}
printf("\n");
} //清空栈
void clear(PSTACK s)
{
if(isEmpty(s)){
return;
} PNODE p = s->pTop;
PNODE q = NULL;
while (p != s->pBottom){
q = p->pNext;
free(p);
p = q;
}
s->pTop = s->pBottom;
}
C代码实现栈的更多相关文章
- 014敲代码将一个栈按升序排序,对这个栈是怎样实现的,你不应该做不论什么特殊的如果(keep it up)
敲代码将一个栈按升序排序. 对这个栈是怎样实现的,你不应该做不论什么特殊的如果. 程序中能用到的栈操作有:push | pop |isEmpty 最easy想到的就是优先队列来做此题.easy实现. ...
- java代码实现栈
这几天在老家有点事,现在弄完了,继续研究一下数据结构,这次的栈并没有对多线程进行优化,如果有想优化的童鞋可以参考我上一篇文章对队列进行的优化,话不多说,上代码: package com.voole.c ...
- 对《神奇的C语言》文中例子 5 代码的分析讨论
在春节前,我曾经参与在<神奇的C语言>一文中的例子(5)的讨论,但限于评论内容的有限,现在本文再次对这个问题单独讨论.(此问题原貌,详见<神奇的C语言>,这里我将原文中的代码稍 ...
- 调试Python代码的工具
pdb: 首先来说Python里内建的调试器,pdb.它利用一个简单的命令行界面,还有很多你在用调试器时用得上的功能.帮助系统能为你指出你能运行的命令,比如单步调试代码,操纵调用栈和设置断点. 一些它 ...
- 29. 栈的push,pop序列
题目:给定2个整数序列,其中1个是栈的push顺序,判断另一个有没有可能是对应的pop顺序 解:其实这题主要是判断进栈次数和出栈次数誓不是相等.我是用栈作的,效率不高,每一个元素最多出栈1次,进栈1此 ...
- 面试题19:包含min函数的栈
CStack.h: #pragma once class CStackElement { public: CStackElement(void){} CStackElement(int data, i ...
- erlang虚拟机代码执行原理
转载:http://blog.csdn.NET/mycwq/article/details/45653897 erlang是开源的,很多人都研究过源代码.但是,从erlang代码到c代码,这是个不小 ...
- 【Java实现】栈和队列就是这么简单
一.前言 上一篇已经讲过了链表[Java实现单向链表]了,它跟数组都是线性结构的基础,本文主要讲解线性结构的应用:栈和队列 如果写错的地方希望大家能够多多体谅并指正哦,如果有更好的理解的方式也希望能够 ...
- Postgres中postmaster代码解析(上)
之前我的一些文章都是在说Postgres的一些查询相关的代码.但是对于Postgres服务端是如何启动,后台进程是如何加载,服务端在哪里以及如何监听客户端的连接都没有一个清晰的逻辑.那么今天我来说说P ...
随机推荐
- sed 命令
使用sed操作: .个人博客的文件,只输出学生姓名 .txt .txt .只输出每个学生的url .txt .只输出个人博客里的学号 .txt .只输出个人博客中,两个字姓名的学生名 .txt .只输 ...
- SpringMVC学习
1,对SpringMVC的理解 a,基于MVC的设计理念 b,采用松散耦合可插拔组件结构,比其他MVC框架更具扩展性和灵活性 c,支持REST风格的URL请求 d,该框架围绕DispatcherSer ...
- AngularJs学习
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- Python 下载网络mp4视频资源
最近着迷化学, 特别是古代的冶炼技术,感叹古人的聪明. 春秋时期的炼铁方法是块炼铁,即在较低的冶炼温度下,将铁矿石固态还原获得海绵铁,再经锻打成的铁块.冶炼块炼铁,一般采用地炉.平地筑炉和竖炉3种.铁 ...
- Javascript实现的数组降维——维度不同,怎么谈恋爱
数组的元素可能是数组,这样一层层嵌套,可能得到一个嵌套很深的数组,数组降维要做的事就是把嵌套很深的数组展开,一般最后得到一个一维数组,其中的元素都是非数组元素,比如数组[1, [2, 3, [4, 5 ...
- Mac下golang开发环境配置
go语言在开发效率和运行效率中的优势让很多人青睐,所以有倾向打算转向go语言的开发. 下面介绍在Mac OS X中golang的开发环境配置. 1.安装brew brew是一个mac下的由ruby开发 ...
- 开发日志_Jan.6.2017
Github Jan.2 接到了汤松岩的GUI框架,开始复习和学习C++的使用方法(之前的开发经历主要使用的Java,对C++和QT环境都需要一个再了解). Jan.3 正式开始工作.开始在Ubunt ...
- View动画和属性动画
在应用中, 动画效果提升用户体验, 主要分为View动画和属性动画. View动画变换场景图片效果, 效果包括平移(translate), 缩放(scale), 旋转(rotate), 透明(alph ...
- 《UML大战需求分析》阅读随笔(一)
UML:Unified Modeling Language(统一建模语言) 作为我专业学科里的一门语言,其目的就是交流,同客户交流,同自己交流. 用图像和文字,详细地讲解将要做的工程的 需求和功能细节 ...
- 如何关闭eslint
在vue-cli搭建webpack中,使用eslint进行代码规范化检查. 进行关闭,在根目录下有个.eslintignore直接将不想要检查的文件丢进去就可以了 也可以在重构的时候把它关闭掉