# 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代码实现栈的更多相关文章

  1. 014敲代码将一个栈按升序排序,对这个栈是怎样实现的,你不应该做不论什么特殊的如果(keep it up)

    敲代码将一个栈按升序排序. 对这个栈是怎样实现的,你不应该做不论什么特殊的如果. 程序中能用到的栈操作有:push | pop |isEmpty 最easy想到的就是优先队列来做此题.easy实现. ...

  2. java代码实现栈

    这几天在老家有点事,现在弄完了,继续研究一下数据结构,这次的栈并没有对多线程进行优化,如果有想优化的童鞋可以参考我上一篇文章对队列进行的优化,话不多说,上代码: package com.voole.c ...

  3. 对《神奇的C语言》文中例子 5 代码的分析讨论

    在春节前,我曾经参与在<神奇的C语言>一文中的例子(5)的讨论,但限于评论内容的有限,现在本文再次对这个问题单独讨论.(此问题原貌,详见<神奇的C语言>,这里我将原文中的代码稍 ...

  4. 调试Python代码的工具

    pdb: 首先来说Python里内建的调试器,pdb.它利用一个简单的命令行界面,还有很多你在用调试器时用得上的功能.帮助系统能为你指出你能运行的命令,比如单步调试代码,操纵调用栈和设置断点. 一些它 ...

  5. 29. 栈的push,pop序列

    题目:给定2个整数序列,其中1个是栈的push顺序,判断另一个有没有可能是对应的pop顺序 解:其实这题主要是判断进栈次数和出栈次数誓不是相等.我是用栈作的,效率不高,每一个元素最多出栈1次,进栈1此 ...

  6. 面试题19:包含min函数的栈

    CStack.h: #pragma once class CStackElement { public: CStackElement(void){} CStackElement(int data, i ...

  7. erlang虚拟机代码执行原理

     转载:http://blog.csdn.NET/mycwq/article/details/45653897 erlang是开源的,很多人都研究过源代码.但是,从erlang代码到c代码,这是个不小 ...

  8. 【Java实现】栈和队列就是这么简单

    一.前言 上一篇已经讲过了链表[Java实现单向链表]了,它跟数组都是线性结构的基础,本文主要讲解线性结构的应用:栈和队列 如果写错的地方希望大家能够多多体谅并指正哦,如果有更好的理解的方式也希望能够 ...

  9. Postgres中postmaster代码解析(上)

    之前我的一些文章都是在说Postgres的一些查询相关的代码.但是对于Postgres服务端是如何启动,后台进程是如何加载,服务端在哪里以及如何监听客户端的连接都没有一个清晰的逻辑.那么今天我来说说P ...

随机推荐

  1. 考前预习(Ubuntu配备)

    这几天考前预习,趁现在不想预习,写点之前就想写的东西吧. 贴一下个人认为有用的,在Ubuntu装机后的一些小事.不过挺杂的,主要是拿来给以后的自己看,以及让现在无聊的我有点事做. 首先,Ubuntu官 ...

  2. mac 给某个目录添加权限

    1  cd 到这个目录的上一层目录 2  sudo  chmod  -R 777 3 输入密码 4 完成

  3. WPF 变量转换的实现

    有时候,我们传入的是一个值,但是真正显示的需要是另一个值,这时候就需要转换.比如我们传入一个枚举值,而不同的枚举值对于的图片是不一样的. 这时候就需要一个转换规则.WPF里面给我们提供了一个接口IVa ...

  4. MFC 静态文本的自绘 空心字的实现

    想在对话框里,显示几个字是很简单的,只要用静态文本的输出就可以了.然而有时候我们需要显示特效的字,我们希望显示的文字就像Word里的艺术字一样,看起来美观.这时我们可以重写CStatic类.用Draw ...

  5. WPF之Binding初探

    初学wpf,经常被Binding搞晕,以下记录写Binding的基础. 首先,盗用张图.这图形象的说明了Binding的机理. 对于Binding,意思是数据绑定,基本用法是: 1.在xmal中使用 ...

  6. php.ini 配置详解【转载】

    [PHP]engine = On   #是否启用PHP解析引擎zend.ze1_compatibility_mode = Off #是否在Last-Modified应答头中放置该PHP脚本的最后修改时 ...

  7. sqlval

    SQL_STRUCTURE sqlvar { short sqltype; short sqllen; _SQLOLDCHAR *SQL_POINTER sqldata; short *SQL_POI ...

  8. 基于ZooKeeper的分布式锁和队列

    在分布式系统中,往往需要一些分布式同步原语来做一些协同工作,上一篇文章介绍了Zookeeper的基本原理,本文介绍下基于Zookeeper的Lock和Queue的实现,主要代码都来自Zookeeper ...

  9. DTMF三种模式(SIPINFO,RFC2833,INBAND)

    转自:http://www.tuicool.com/articles/n6Vb2iJ 1.DTMF(双音多频)定义:由高频音和低频音的两个正弦波合成表示数字按键(0~9 * # A B C D). 2 ...

  10. [原创] Go语言在Centos上的部署

    序言 Golang是个好东西啊.部署非常简单,对于运维人员来说太爽了. 传统的Nginx啊Apache啊,外加PHP以及各个插件啊搞得头晕. 用了Go之后就什么都不需要了.只要把生成好的文件向服务器上 ...