代码 c++实现动态栈
//============================================================================
// Name : 栈.cpp
// Author : xingbo
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//============================================================================
#include <iostream>
#include <malloc.h>
#include <stdlib.h>
using namespace std;
typedef struct Node{
int data;
Node * pNext;
}NODE,*PNODE;
typedef struct Stack{
PNODE pTop;
PNODE pBottom;
}STACK,* PSTACK;
//以上两个,分别是节点,栈的定义
/*
* pBottom永远指向最下面的一个ptop移动插入或者删除数据,判断栈为空,利用pbottom=ptop,判断是否满,不存在,满不满的问题
*/
void init(PSTACK p){//传一个地址,等价于stack * p
PNODE tmp=(PNODE)malloc(sizeof(NODE));//需要给他制定一个top和bottom并且指向同一个地址
if (tmp==NULL){
cout<<"错误"<<endl;
exit(-1);
}
p->pBottom=tmp;
p->pTop=tmp;
p->pTop->pNext=NULL;//这一句很难想出来
}
bool push(PSTACK p,int data){
/*
* 1.创造新的节点
* 2.新的节点指向之前的top
* 3.然后将ptop指向这个新的节点,
*
*/
PNODE pnode = (PNODE)malloc(sizeof(NODE));
pnode->data=data;
pnode->pNext=p->pTop;
p->pTop=pnode;
return true;}
void traverse(PSTACK p){
PNODE t=p->pTop;
while (t!=p->pBottom){
cout<<t->data<<",";
t=t->pNext;
}
return;
}
bool isempty(PSTACK p){
if(p->pTop==p->pBottom){
return true;
}else return false;
}
int pop(PSTACK p){
PNODE tmp;
int i;
if (!isempty(p)){
tmp=p->pTop;
i=tmp->data;
p->pTop=p->pTop->pNext;// top下移一个
free(tmp);
}else{
exit(-1);
}
return i;
}
int main() {
STACK S;//生声明一个空间,有两个元素,但是并没有存放有效数据,但是含有:ptop pbottom
init(&S);
push(&S,1);
push(&S,2);
push(&S,3);
push(&S,4);
traverse(&S);
cout<<pop(&S);
cout<<pop(&S);
cout<<"删除之后"<<endl;
traverse(&S);
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
代码 c++实现动态栈的更多相关文章
- 用OC实现一个栈:结合单链表创建动态栈
一.介绍 栈是一种数据存储结构,存储的数据具有先进后出的特点.栈一般分为动态栈和静态栈. 静态栈比较好理解,例如用数组实现的栈.动态栈可以用链表来实现. 方式:固定base指针,每次更改top指向入栈 ...
- 怎么从代码中拿到栈回溯信息(call stack trace)
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:怎么从代码中拿到栈回溯信息(call stack trace).
- NodeJS”热部署“代码,实现动态调试(hotnode,可以实现热更新)
NodeJS”热部署“代码,实现动态调试 开发中遇到的问题 如果你有 PHP 开发经验,会习惯在修改 PHP 脚本后直接刷新浏览器以观察结果,而你在开发 Node.js 实现的 HTTP 应用时会 ...
- 动态栈-------C语言
使用带头结点的单链表实现 主要使用链表中的头插来实现栈的先进后出的特点 /***************************************************** Author:Si ...
- JAVA笔记9__异常/throw关键字/自定义异常/受检与非受检异常、assert关键字/StringBuffer、StringBuilder/代码国际化、动态文本
/** * 异常:在程序中导致程序中断运行的一些指令 * 1.受检异常:编译期 * 2.非受检异常:运行期 * 异常处理过程分析: * 1.一旦产生异常,系统会自动产生一个异常类的实例化对象 * 2. ...
- 4、android xml中drawableTop(drawableBoottom、drawableLeft、drawableRight)在java代码中的动态配置
做安卓开发的朋友都知道,我们在xml中可以通过这样来对button设置其上部或者(下.左.右)的图片资源: 那么如果需要动态配置图片呢?我们不得不使用java代码来进行操作: Drawable dra ...
- [改善Java代码]使用forName动态加载类文件
动态加载(Dynamic Loading)是指在程序运行时加载需要的类库文件,对Java程序来说,一般情况下,一个类文件在启动时或首次初始化时会被加载到内存中,而反射则可以在运行时再决定是否需要加载一 ...
- [改善Java代码]使用Throwable获得栈信息
AOP(Aspect Oriented Programming面向切面编程)可以很轻松的控制一个方法调用哪些类,也能够控制哪些方法允许被调用,一般来说切面编程(比如AspectJ)只能控制到方法级别, ...
- C 汇编代码 函数调用指令和栈平衡
1. CALL指令: CALL指令可不是如唤指令,而是子程序调用指令.那么汇编语言中的子程序是什么呢?子程序能被其它程序调用,在实现某种功能后能自动返回到调用程序去的程序.其最后一条指令一定是返回指令 ...
随机推荐
- 股票技术指标中的VOL,KDJ,MACD,OBV,VR,DMA分别代表什么意思?很关键,谢谢
http://zhidao.baidu.com/link?url=glKK7n0JUgqgrvfx2Gzd937-5zZg1bC615MwAp0P_mrYDytnMUpjoOQgYU871ny8St1 ...
- python3 包
python3 包 执行文件为test.py,内容 #test.py import aaa 同级目录下创建目录aaa,然后自建空__init__.py(或者干脆建包) 需求:验证导入包就是在导入包下的 ...
- Never Go Away
Hey if you ever want to leave it allif you ever want to lose control leave it all escape so far away ...
- JAVA事件监听机制与实现
事件监听机制的实现:参考图:事件模型_ActionEvent 为了节省资源,系统无法对某个事件进行实时的监听.故实现的机制是当发生某个事件后,处理代码将被自动运行,类似钩子一般.(回调函数) 事件有许 ...
- ACM,我回来了!
经过两天的时间,到了家一趟! 我终于又重新回到ACM实验室了!,有点头晕啊!!!
- explain分析sql效果
1.id: 代表select 语句的编号, 如果是连接查询,表之间是平等关系, select 编号都是1,从1开始. 如果某select中有子查询,则编号递增.如下一条语句2个结果 mysql> ...
- 剑指offer之 二叉搜索树的后续遍历序列
题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. public class Solution { ...
- java入门了解14
GUI 1.分类: 一.AWT(Abstract Window Toolkit):抽象窗体工具集 java.awt.*适合做简单的图像用户界面,复杂的不行,基于底层操作系统,所以不同的操作系统显示的界 ...
- hive启动时 Terminal initialization failed; falling back to unsupported java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
错误提示信息如下 [ERROR] Terminal initialization failed; falling back to unsupported java.lang.IncompatibleC ...
- NLP-最小编辑距离
最小编辑距离 一 概念 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的编辑操作次数.最小编辑距离,是指所需最小的编辑操作次数. 编辑操 ...