# 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. sgu 240 Runaway (spfa)

    题意:N点M边的无向图,边上有线性不下降的温度,给固定入口S,有E个出口.逃出去,使最大承受温度最小.输出该温度,若该温度超过H,输出-1. 羞涩的题意 显然N*H的复杂度dp[n][h]表示到达n最 ...

  2. MYSQL字符类型数值排序

    今天遇到MySQL数字排序问题,我的排序字段是经过计算后的,而计算后的字段直接拿来排序就会按照字符一个个排序,所以这里找到简单的方法, ORDER BY 排序字段* 或者 ORDER BY 排序字段+ ...

  3. jQuery中的Ajax - Codeigniter版本

    发送(view中): $.ajax({ type : 'post', url : 'add', data : { 'nickname':nickname, 'mobile':mobile, 'sex' ...

  4. CSS 两列布局 之 左侧适应,右侧固定 3种方式

    第一种:左侧用margin-right,右侧float:right CSS代码: html, body,ul,li #wrapper { width: 100%; height: 100%; padd ...

  5. UWP VirtualizedVariableSizedGridView 支持可虚拟化可变大小Item的View(二)

    上篇UWP VirtualizedVariableSizedGridView 支持可虚拟化可变大小Item的View(一) 讲到该控件的需要和设计过程. 这篇讲讲开发过程中一些重要问题解决. 1.支持 ...

  6. ubuntu14.04下配置Java环境以及安装最新版本的eclipse

    首先是配置JDK 步骤一:下载最新版本的JDK,链接:http://www.oracle.com/technetwork/java/javase/downloads/index.html 步骤二:首先 ...

  7. WCF 学习篇

    写在前面 自从运用了.NET Remoting 之后,就想系统的学习下WCF,因为WCF是对现有分布式通信技术的整合.主要以 <WCF全面解析> 这本书为主,园子的资料和网上资料为辅,来学 ...

  8. java中的泛型的使用与理解

    什么是泛型? 泛型是程序设计语言的一种特性.允许程序员在强类型程序设计语言中编写 体验泛型代码时定义一些可变部份,那些部份在使用前必须作出指明.各种程序设计语言和其编译器.运行环境对泛型的支持均不一样 ...

  9. vue2.0有哪些变化

    vue2.0之后有哪些变化: 1.每个组件模板template,不再支持片段代码 之前: <template> <h3>vue-router+vue-loader</h3 ...

  10. AudioSpecificConfig

    2个字节. 下面蓝色的为AudioSpecificConfig部分: 000001e0h: 00 00 00 00 00 AF 0011 90 00 00 00 0F 09 00 02; .....? ...