C代码实现栈
# 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代码实现栈的更多相关文章
- 014敲代码将一个栈按升序排序,对这个栈是怎样实现的,你不应该做不论什么特殊的如果(keep it up)
敲代码将一个栈按升序排序. 对这个栈是怎样实现的,你不应该做不论什么特殊的如果. 程序中能用到的栈操作有:push | pop |isEmpty 最easy想到的就是优先队列来做此题.easy实现. ...
- java代码实现栈
这几天在老家有点事,现在弄完了,继续研究一下数据结构,这次的栈并没有对多线程进行优化,如果有想优化的童鞋可以参考我上一篇文章对队列进行的优化,话不多说,上代码: package com.voole.c ...
- 对《神奇的C语言》文中例子 5 代码的分析讨论
在春节前,我曾经参与在<神奇的C语言>一文中的例子(5)的讨论,但限于评论内容的有限,现在本文再次对这个问题单独讨论.(此问题原貌,详见<神奇的C语言>,这里我将原文中的代码稍 ...
- 调试Python代码的工具
pdb: 首先来说Python里内建的调试器,pdb.它利用一个简单的命令行界面,还有很多你在用调试器时用得上的功能.帮助系统能为你指出你能运行的命令,比如单步调试代码,操纵调用栈和设置断点. 一些它 ...
- 29. 栈的push,pop序列
题目:给定2个整数序列,其中1个是栈的push顺序,判断另一个有没有可能是对应的pop顺序 解:其实这题主要是判断进栈次数和出栈次数誓不是相等.我是用栈作的,效率不高,每一个元素最多出栈1次,进栈1此 ...
- 面试题19:包含min函数的栈
CStack.h: #pragma once class CStackElement { public: CStackElement(void){} CStackElement(int data, i ...
- erlang虚拟机代码执行原理
转载:http://blog.csdn.NET/mycwq/article/details/45653897 erlang是开源的,很多人都研究过源代码.但是,从erlang代码到c代码,这是个不小 ...
- 【Java实现】栈和队列就是这么简单
一.前言 上一篇已经讲过了链表[Java实现单向链表]了,它跟数组都是线性结构的基础,本文主要讲解线性结构的应用:栈和队列 如果写错的地方希望大家能够多多体谅并指正哦,如果有更好的理解的方式也希望能够 ...
- Postgres中postmaster代码解析(上)
之前我的一些文章都是在说Postgres的一些查询相关的代码.但是对于Postgres服务端是如何启动,后台进程是如何加载,服务端在哪里以及如何监听客户端的连接都没有一个清晰的逻辑.那么今天我来说说P ...
随机推荐
- Selenium使用
定位 1.普通 by id, name,class_name,link_text 2.加强 xpath css
- I/O 函数总结
经过一段时间的学习,发现字符处理时或者文件处理时,经常需要进行输入(读入)和输出,而可供选择的函数很多,现在反而容易搞混淆,下面就对常用的7个 输入输出函数 进行总结和比较,以便于区分和熟练掌握. 标 ...
- vue笔记
安装vue脚手架工具 sudo cnpm install -g vue-cli
- 接触PHP快4个月
就要下班了,接触php快4个月,掌握的不好,需要实战,看到自己博客空空的,就mark一下吧!下班了...
- MVC AjaxOptions 中的OnSuccess方法执行多次的问题
原因是单个页面嵌套多个部分视图,而多个视图中有多个表单提交但是Onsuccess方法的函数名是一样的. 例如主页面的Onsuccess方法叫success 点击部分视图后js文件又含有一个succes ...
- window.print() 打印页面部分内容的方法
用 JavaScript 实现页面数据的打印 : 主要是用到了一个 print() 函数 , 该函数将会打印整个 web 页面 body 内的所有 html 数据 ! 使用方法为 window.pri ...
- Linux中杀不死的进程
前段时间,一哥们,去杀Linux服务器的进程,发现kill命令失灵了,怎么杀都杀不死. 然后上网查了下资料,原来是要被杀的进程,成为了僵尸进程. 僵尸进程的查看方法: 利用命令ps,可以看到有标记为Z ...
- ubuntu下更改鼠标移动速度
ubuntu下,系统设置中,无法更改外接鼠标的移动指针速度,如图: 然后百度,终于找到一个靠谱打方法: 命令: xset m N 其中,N是速度,估计取值为0-10 该方法比起网上的某些攻略简单好多
- 解决虚拟机中使用ntpdate报错:ntpdate[46700]: no server suitable for synchronization found
在使用ntpdate同步时间时出现上述错误: ntpdate[46700]: no server suitable for synchronization found 没有找到好的解决方案,只能换另外 ...
- F#之旅5 - 小实践之下载网页(爬虫基础库)
参考文章:https://swlaschin.gitbooks.io/fsharpforfunandprofit/content/posts/fvsc-download.html 参考的文章教了我们如 ...