33_栈程序演示.swf

pBottom执行栈底有效元素的前一个节点,该节点没有存储有效数据,这样设计是便于栈的管理,向链表一样pHead指向链表的第一个节点,该节点是不存储有效数据的
pTop执行栈顶最新的节点
如果pTop和pBottom的值一样,说明栈是空的
经过初始化栈之后,栈的结构是:

向栈中添加一个数据

所以pBottom永远执行栈顶有效节点的前一个节点,该节点不存储有效数据,该节点的pNext下一个节点为NULL

#include<stdio.h>
#include<malloc.h>
#include <stdio.h>
#include <stdlib.h> /*
使用链表使用一个栈的数据结构 */
//定义一个链表的节点
typedef struct Node{
int data;//数据域
struct Node * pNext;
}NODE,*PNODE; typedef struct Stack{
PNODE pTop; //栈顶指针
PNODE pBottom; //栈底的指针
}STACK,*PSTACK; //STACK等价于 struct Stack, PSTACK等价于 struct Stack* /*初始化栈
void init(struct Stack* pStack){
*/
void initStack(PSTACK pStack){
pStack->pTop = (PNODE)malloc(sizeof(NODE));
if(NULL == pStack->pTop ){
printf("分配内存失败");
exit(-);
}else{
pStack->pBottom = pStack->pTop;//二者指向同一个内存单元
pStack->pBottom->pNext = NULL; //pBottom指向栈底有效节点的前一个节点,该节点不存储有效数据,该节目之前没有任何其他节点
} } /*
将数据放入栈中 */
void pushStack(PSTACK pStack,int val){
PNODE pNew = (PNODE)malloc(sizeof(NODE));//产生一个新的节点
pNew->data = val;//把值添加到新的节点中
pNew->pNext = pStack->pTop;//让新的节点的下一个节点等于现在栈顶
pStack->pTop = pNew;//最新栈顶的值等于最新的节点 } /**对栈的数据进行遍历操作
栈的数据是先进后出
定义一个变量p,在遍历的时候只有p不等于pBottom,就可以将p的值输出
*/ void traverse(PSTACK pStack){
PNODE p = pStack->pTop;
//对p进行遍历输出
while(p != pStack->pBottom){
//输出变量的结果
printf("%d\n",p->data);
p = p->pNext;
}
} int main(){
STACK s;//
initStack(&s);
pushStack(&s,);
pushStack(&s,);
pushStack(&s,);
pushStack(&s,);
traverse(&s);
return ;
}
我们来看程序的运行效果是:

可以完善下面的代码:
#include<stdio.h>
#include<malloc.h>
#include <stdio.h>
#include <stdlib.h> /*
使用链表使用一个栈的数据结构 */
//定义一个链表的节点
typedef struct Node{
int data;//数据域
struct Node * pNext;
}NODE,*PNODE; typedef struct Stack{
PNODE pTop; //栈顶指针
PNODE pBottom; //栈底的指针
}STACK,*PSTACK; //STACK等价于 struct Stack, PSTACK等价于 struct Stack* /*初始化栈
void init(struct Stack* pStack){
*/
void initStack(PSTACK pStack){
pStack->pTop = (PNODE)malloc(sizeof(NODE));
if(NULL == pStack->pTop ){
printf("分配内存失败");
exit(-);
}else{
pStack->pBottom = pStack->pTop;//二者指向同一个内存单元
pStack->pBottom->pNext = NULL; //pBottom指向栈底有效节点的前一个节点,该节点不存储有效数据,该节目之前没有任何其他节点
} } /*
将数据放入栈中 */
void pushStack(PSTACK pStack,int val){
PNODE pNew = (PNODE)malloc(sizeof(NODE));//产生一个新的节点
pNew->data = val;//把值添加到新的节点中
pNew->pNext = pStack->pTop;//让新的节点的下一个节点等于现在栈顶
pStack->pTop = pNew;//最新栈顶的值等于最新的节点 } /*判断栈是否是空*/
bool isEmpty(PSTACK pStack){
if(pStack->pTop == pStack->pTop){
return true;//空栈
}else{
return false;
}
} /*数据的出栈,将出栈的数据保存到int*val中*/
bool popStack(PSTACK pStack,int*val){ if(isEmpty(pStack)){//栈是空的
return false; }else{
PNODE p = pStack->pTop;
(*val) = p->data;
pStack->pTop = p->pNext;
free(p); //一定要记得释放内存
p= NULL;
return true
} } /*清空栈的元素
让栈回到初始化的状态
*/
void clear(PSTACK pStack){
if(isEmpty(pStack)){//栈是空的
return ;
}else{
PNODE p = pStack->pTop;
PNODE q = NULL;
while(p != pStack->pBottom ){
q = p->pNext;
free(p);
p=q;
}
//最后
pStack->pTop = pStack->pBottom;
} } /**对栈的数据进行遍历操作
栈的数据是先进后出
定义一个变量p,在遍历的时候只有p不等于pBottom,就可以将p的值输出
*/ void traverse(PSTACK pStack){
PNODE p = pStack->pTop;
//对p进行遍历输出
while(p != pStack->pBottom){
//输出变量的结果
printf("%d\n",p->data);
p = p->pNext;
}
} int main(){
STACK s;//
initStack(&s);
pushStack(&s,);
pushStack(&s,);
pushStack(&s,);
pushStack(&s,);
traverse(&s);
return ;
}
33_栈程序演示.swf的更多相关文章
- 47 _ 循环队列程序演示.swf
通过上面的分析我们已经对循环队列很了解了,现在我们来学习下循环队列的实现形式 1.代码使用数组现实循环队列 #include<stdio.h> #include<malloc.h&g ...
- C程序演示产生僵死进程的过程
先抄录网上一段对僵死进程的描述: 僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中.这种 ...
- 制作Android Demo GIF:程序演示效果GIF图录制
[转] 制作Android Demo GIF:程序演示效果GIF图录制 在平时写博客或者分享自己写的程序效果的时候经常需要做成GIF图,以下就是介绍几种常用的GIF录制方法: 一.录制工具 1.( ...
- MapGuide应用程序演示样例——你好,MapGuide!
图 3‑4显示了基于MapGuide的Web应用程序的开发流程,整个开发流程能够分为五个阶段.图中,矩形代表任务,椭圆形被任务使用的或被任务创建的实体,箭头代表数据流. 1) 载入文件类型的数据,配置 ...
- Java全栈程序员之03:Ubuntu下安装idea
JetBrains的产品我曾经用过很长一段时间,它们是resharper和dotcover.VS号称宇宙最强IDE,直到它遇到了resharper,我们才知道,原来vs可以更好.DotCover是一个 ...
- 【UNIX网络编程(三)】TCP客户/server程序演示样例
上一节给出了TCP网络编程的函数.这一节使用那些基本函数编写一个完毕的TCP客户/server程序演示样例. 该样例运行的过程例如以下: 1.客户从标准输入读入一行文本,并写给server. 2.se ...
- 20155301第十一周java课栈程序
20155301第十一周java课栈程序 内容一:后序表达式: abcde/-f+ 内容二:根据填充以下代码: import java.util.Scanner; public class MyDCT ...
- html5 canvas程序演示--P1197 [JSOI2008]星球大战
html5 canvas程序演示--P1197 [JSOI2008]星球大战 <!doctype html> <html> <head> <meta char ...
- Java全栈程序员之08:MAVEN+JAVA配置
从Spring3.0开始,Spring支持以Java配置的方式来代替XML配置.这一点说起来其实有点可笑,XML配置的方式最初被创建出来就是为了让配置与程序员无关.可是最终我们发现,绝大多数的那些配置 ...
随机推荐
- Matlab矩阵学习一 矩阵的创建
Matlab矩阵创建 1.直接输入数值创建 矩阵元素要用[ ] 括起来,";"代表一行结束,以下创建方式也是合法的,矩阵的元素可以是实数,也可以是复数,复数用a+bi表 ...
- CE未知数值修改
一样,用植物大战僵尸测试.来搜索修改向日葵生产阳光的CD值. 由于开始并不知道向日葵cd的初始值,所以用CE搜索未知的初始值 返回游戏,每次向日葵晃一下搜索一下减少的值. 锁定修改为0发现成功. 然后 ...
- 学习使用re做解析器爬小说
一.背景:近期学习python爬虫中看到,在对网页内容进行解析的技术中,re正则表达式工具也是一个很好的工具,使用re编制爬虫工具正好熟悉re正则表达式的使用. 二.环境及爬取目标 1.linux c ...
- Rocket - devices - BasicBusBlocker
https://mp.weixin.qq.com/s/m1zfFQeSoGZZduJGbxEqdQ 简单介绍BasicBusBlocker的实现. 1. BasicBusBlockerParams B ...
- jchdl - GSL实例 - Mux4
https://mp.weixin.qq.com/s/hh0eExVFC6cxzpvNI1cA9A 使用门实现四选一选择器. 原理图 参考链接 https://github.com/wjcdx/ ...
- Java实现蓝桥杯模拟空地长草
问题描述 小明有一块空地,他将这块空地划分为 n 行 m 列的小块,每行和每列的长度都为 1. 小明选了其中的一些小块空地,种上了草,其他小块仍然保持是空地. 这些草长得很快,每个月,草都会向外长出一 ...
- Java实现 计蒜客 1251 仙岛求药
仙岛求药 少年李逍遥的婶婶病了,王小虎介绍他去一趟仙灵岛,向仙女姐姐要仙丹救婶婶.叛逆但孝顺的李逍遥闯进了仙灵岛,克服了千险万难来到岛的中心,发现仙药摆在了迷阵的深处.迷阵由 M \times NM× ...
- Java实现 蓝桥杯VIP 算法提高 促销购物
算法提高 促销购物 时间限制:1.0s 内存限制:256.0MB 问题描述 张超来到了超市购物. 每个物品都有价格,正好赶上商店推出促销方案.就是把许多东西一起买更便宜(保证优惠方案一定比原价便宜). ...
- java实现多线程(车站卖票)
import java.util.ArrayList; import java.util.List; public class 多线程 { // public static int j=0; publ ...
- 关于VMware虚拟机启动EFI/UEFI支持
作为较新计算机和操作系统用于引导计算机的技术,可扩展固件接口 (EFI) 正在取代 BIOS.EFI 有时称为统一可扩展固件接口 (UEFI). 使用VMware创建虚拟机,默认还是会使用传统的BIO ...