栈清空程序演示

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>typedef struct Node{int data;struct Node * pNext;
}NODE,*PNODE;typedef struct Stack{PNODE pTop;        //栈顶元素PNODE pBottom;     //栈底部元素
}STACK,*PSTACK;void init(PSTACK);
void push(PSTACK, int);
void traverse(PSTACK);bool pop(PSTACK, int *p);
bool empty(PSTACK ps);   //判空void clear(PSTACK ps);   //清空int main(void){STACK s;           //等价于struct Stackinit(&s);            //初始化push(&s,1);            //压栈 push(&s, 2);push(&s, 3);push(&s, 4);push(&s, 5);push(&s, 6);push(&s, 7);traverse(&s);      //遍历输出//清空栈clear(&s);traverse(&s);      //遍历输出int val;   //保存出栈的元素//出栈一个元素if (pop(&s, &val)) {printf("出栈成功,出栈的元素是%d\n", val);}else {printf("出栈失败,出栈的元素是%d\n", val);}traverse(&s);      //遍历输出while (true){	}return 0;
}//初始化造出一个空栈
void init(PSTACK ps) {ps->pTop = (PNODE)malloc(sizeof(NODE));if (NULL == ps->pTop) {printf("动态内存失败");exit(-1);}else {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 traverse(PSTACK ps) {PNODE p = ps->pTop;while (p != ps->pBottom) {printf("%d   ",p->data);p = p->pNext;}printf("\n");return;
}//把ps所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,如果出栈失败,返回false,否则返回true
bool pop(PSTACK  ps, int *pVal) {//如果为空返回falseif (empty(ps)) {return false;}else {PNODE tmp = ps->pTop; //构造一个临时节点,存放ps指向顶部元素的地址(顶部元素是要出栈的)*pVal = tmp->data;    //出栈的元素ps->pTop=tmp->pNext;free(tmp);tmp = NULL;return true;}}bool empty(PSTACK ps) {if (ps->pTop == ps->pBottom) {return true;}else {return false;}
}void clear(PSTACK ps) {if (empty(ps)) {return;}else {//构造一个临时节点指针p存放栈顶节点的地址PNODE p = ps->pTop;PNODE q = NULL;   //构造一个临时节点指针q  将q指针的地址置空while (p != ps->pBottom) {  //p != ps->pBottom  表示这不是一个空栈  然后就循环q = p->pNext;         //将栈顶元素下一个元素的地址给qfree(p);              //把栈顶元素p释放p = q;                //把q又赋值给p此时   p就指向了栈顶的下一个元素,由于栈顶元素被释放,此时p又是栈顶元素}ps->pTop = ps->pBottom;}}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576340.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hdu 1325 Is It A Tree?

题目链接 #include"stdio.h" int set[1001],v[1001],cnt[10001],flag; //初始化 void fun() {int i;flag1;for(i1;i<1000;i){set[i]i;v[i]0;cnt[i]0;} } //查找根节点 int find(int x) {return xset[x]?x:find(set[x]); } int judge() {int i,t;for(i1;i<1000…

数据库的介绍

##本单元目标 一、为什么要学习数据库 二、数据库的相关概念 DBMS、DB、SQL 三、数据库存储数据的特点 四、初始MySQL MySQL产品的介绍 MySQL产品的安装 ★ MySQL服务的启动和停止 ★ …

InfoPath Resource Sites

http://blogs.msdn.com/infopath_support/archive/2009/11/09/9919841.aspx转载于:https://www.cnblogs.com/mingle/archive/2012/07/24/2606277.html

MySQL的常见命令

###MySQL的常见命令 1.查看当前所有的数据库 show databases; 2.打开指定的库 use 库名 3.查看当前库的所有表 show tables; 4.查看其它库的所有表 show tables from 库名; 5.创建表 create table 表名( 列名 列类型, 列名 列类型…

算法导论 CLRS 22.4-4 解答

先说结论&#xff1a; 对于有环图&#xff0c;top排序不一定可以生成坏边最小的序列 证明&#xff1a; 1. 假设G至少需要去掉k条边才能变成无环图&#xff0c;则任意序列P的坏边数目bad[P] > k&#xff1b; 证明&#xff1a; 如果存在P使得bad[P] < k, 则只要去掉P中的坏…

MySQL DQL语言的笔记

##DQL语言的学习 ###进阶1&#xff1a;基础查询 语法&#xff1a; SELECT 要查询的东西 【FROM 表名】; 类似于Java中 :System.out.println(要打印的东西); 特点&#xff1a; ①通过select查询完的结果 &#xff0c;是一个虚拟的表格&#xff0c;不是真实存…

MySQL学习笔记——显示数据库信息

show privileges 显示可用的系统权限清单。   View Code mysql> show privileges;-----------------------------------------------------------------------------------------------------------------------| Privilege | Context …

MySQL DML语言笔记

##DML语言 ###插入 语法&#xff1a; insert into 表名(字段名&#xff0c;...) values(值1&#xff0c;...); 特点&#xff1a; 1、字段类型和值类型一致或兼容&#xff0c;而且一一对应 2、可以为空的字段&#xff0c;可以不用插入值&#xff0c;或用null填充…

2012年7月份第4周51Aspx源码发布详情

变幻球游戏源码 2012-7-27[VS2010] 游戏规则&#xff1a;球变色顺序: 绿->黄->橙->红->爆炸&#xff0c;在GO完后就可以开始不停拨球&#xff0c;任何颜色都可以拨球&#xff0c;让其重新计时&#xff0c;否则等它们同时变出一大片黄色&#xff0c;会应接不暇&…

MySQL DDL语言笔记

##DDL语句 ###库和表的管理 库的管理&#xff1a; 一、创建库 create database 库名 二、删除库 drop database 库名 表的管理&#xff1a; #1.创建表 CREATE TABLE IF NOT EXISTS stuinfo( stuId INT, stuName VARCHAR(20), …

生成指定大小的空文件

dd if/dev/zero ofM.file bs1M count50 生文件名为 M.file的空文件&#xff0c;写 50 次&#xff0c;每次写1M&#xff1b;转载于:https://www.cnblogs.com/bluebbc/archive/2012/08/03/2621284.html

MySQL事务介绍

##数据库事务 ###含义 通过一组逻辑操作单元&#xff08;一组DML——sql语句&#xff09;&#xff0c;将数据从一种状态切换到另外一种状态 ###特点 &#xff08;ACID&#xff09; 原子性&#xff1a;要么都执行&#xff0c;要么都回滚 一致性&#xff1a;保证…

【原】unity3D ios 退出保存数据(2)

前一篇退出保存数据仅试用于ipad1 ipad2 、phone4s及以前版本&#xff0c;不适用于new pad(不支持后台渲染) 所以修改了前文&#xff0c;以此适应现有的所有ios设备. 实现如下&#xff1a; void OnApplicationPause(bool pause) { if(pause)//暂停游戏 { …

队列入门简介

线性结构的两种常见应用之二队列 定义:种可以实现“先进先出”的存储结构 分类:链式队列(链表实现)、静态队列(数组实现) 队列&#xff08;常用数据结构之一&#xff09; 队列是一种特殊的线性表&#xff0c;特殊之处在于它只允许在表的前端&#xff08;front&#xff09;进行…

java利用htmlparser得到网页html内容

java利用htmlparser得到网页html内容&#xff0c;利用org.htmlparser.Parser包我们可以很轻松取到任何页面的源代码&#xff0c;方法如下&#xff1a; /*** 返回网页内容* * param path* return*/public static String getItemDesc() {String htmlStr "";try {URL u…

ucOS看门狗

在实时多任务系统中&#xff0c;定时器的喂狗不能在像硬件编程那样在循环中喂狗。 ucos系统中&#xff0c;多个任务就像把程序划分成了多个main&#xff08;&#xff09;。喂狗也不像无系统程序那么简单。在参考了网上高手的帖子后&#xff0c;总结了以下几种方式: 方法1:在最低…

静态队列

静态队列- --用数组实现 静态队列通常都必须是循环队列 循环队列的讲解: 1.静态队列为什么必须是循环队列&#xff1f; 数组表示的问题  对于队列最好的方法是使用链表实现&#xff0c;因为对于数组来说&#xff0c;队列可能会出现下面这种情况&#xff1a; 如图所示&#…

多态的概念,特点与使用

多态&#xff1a;可以理解为事物存在的多种体现形态 如&#xff1a;人&#xff1a;男人&#xff0c;女人 动物&#xff1a;猫&#xff0c;狗&#xff0c;鸟 猫这个动物应该是猫类型的&#xff1a;猫 cat new 猫(); 同时猫也是动物的一种&#xff1a;动物 y new 猫(); 动物是…

链表队列入门介绍

1&#xff0c;快速开始&#xff1a; 队列是一种和栈相反的&#xff0c;遵循先进先出原则的线性表。此文章使用链表来实现队列。 如上图所示&#xff0c;就像一个自来水管&#xff0c;先进入水管的水先从水龙头出来&#xff0c;即Front位置的元素最先出队列&#xff0c;因为它们…

去掉viewstate保持在页面中的一大串字符的方法

去掉<input type"hidden" name"__VIEWSTATE" id"__VIEWSTATE" value 后面好多~。。。。在顶部中加入 EnableViewState"false" &#xff0c;就可以去掉了&#xff0c;前提是你用不到它 &#xff0c;我加了EnableViewState"fals…