c语言is stack empty,C语言实现栈的问题
为什么代码没有正常输出?
#include
#include
#include "stack.h"
int main()
{
Stack S;
int isEmpty;
printf("##########栈操作########\n");
S = CreateStack();
printf("输出栈中元素\n");
return 0;
}
下面是stack.h代码
#ifndef _STACK_H
#define _STACK_H
typedef int ElementType;
struct StackNode;
typedef struct StackNode *PtrToStackNode;
typedef PtrToStackNode Stack;
int IsEmpty( Stack S );
Stack CreateStack( void );
void DisposeStack( Stack S );
void MakeEmpty( Stack S );
void Push( ElementType E, Stack S );
ElementType Top( Stack S );
void Pop( Stack S );
/*实现栈---带特殊头结点的链表*/
struct StackNode
{
ElementType Element;
PtrToStackNode Next;
};
#endif //LINKEDLIST_STACK_H
int IsEmpty( Stack S )
{
return S->Next == NULL;
}
Stack CreateStack( void )
{
Stack S;
printf("What do you echo?\n");
S = malloc( sizeof( struct StackNode ) );
if( S == NULL )
exit(1);
MakeEmpty( S );
printf("\nIs something wrong here?\n");
return S;
}
void MakeEmpty( Stack S )
{
printf("\nMakeEmpty Stack\n");
int tmp;
if( S == NULL )
{
printf("S == NULL\n");
exit(1);
}
else
{
tmp = IsEmpty(S);
printf("tmp is%d\n",tmp);
while( !IsEmpty( S ) ){
Pop( S );
}
}
}
void Pop( Stack S )
{
PtrToStackNode FirstCell;
printf("Pop Stack\n");
if( IsEmpty( S ) )
{
printf("Pop Empty Stack\n");
exit(0);
}
else
{
printf("free firstCell\n");
FirstCell = S->Next;
S->Next = S->Next->Next;
free( FirstCell );
}
}
void Push( ElementType E, Stack S )
{
PtrToStackNode TmpCell;
TmpCell = malloc( sizeof( struct StackNode ) );
if( TmpCell == NULL )
exit(0);
else
{
TmpCell->Element = E;
TmpCell->Next = S->Next;
S->Next = TmpCell;
}
}
void DisplayStack( Stack S )
{
if( S == NULL )
exit(0);
else
{
while( S->Next != NULL){
printf("echo something");
printf("***%d***",S->Element);
S = S->Next;
}
}
}
程序执行时输出
debug时初始化的Stack是空的,为什么程序跑起来的时候就不为空了呢?
为什么“输出栈中元素”这个字符串没有输出啊!
望指教!
c语言is stack empty,C语言实现栈的问题相关推荐
- c语言实现stack的算法(附完整源码)
C语言实现stack的算法 C语言实现stack的算法完整源码(定义,实现,main函数测试) C语言实现stack的算法完整源码(定义,实现,main函数测试) #ifndef STACK_H #d ...
- c语言中栈区运用原理形象图,C语言实现使用动态数组来构造栈结构
我在面前一篇博客<C语言实现使用静态数组来构造栈结构>中使用了静态数组来模拟栈的操作.静态数组的大小是在代码中写死的.是存储在用户栈上面的,使用起来不灵活.在这篇博客中我会使用动态数组来构 ...
- python动态语言双刃性_动态语言的灵活性是把双刃剑:以 Python 语言为例
原标题:动态语言的灵活性是把双刃剑:以 Python 语言为例 本文有些零碎,总题来说,包括两个问题:(1)可变对象(最常见的是list dict)被意外修改的问题,(2)对参数(parameter) ...
- C语言的内存管理(堆,栈,代码段,数据段)
C语言的内存管理(堆,栈,代码段,数据段) 一.几个基本概念 在C语言中,关于内存管理的知识点比较多,如函数.变量.作用域.指针等,在探究C语言内存管理机制时,先简单复习下这几个基本概念: 1.变量: ...
- c语言计算器程序代码 链栈,【C语言】简易科学计算器源代码(链栈应用)(原创).doc...
[C语言]简易科学计算器源代码(链栈应用)(原创) 用到的是算符优先法的思想,现摘自严蔚敏的数据结构(C语言版)的3.2.5章来详细说明算符优先法的思想: (摘抄结束) 我给出的计算器功能有:支持欧拉 ...
- c语言 程序段 数据段,C语言程序的段
C语言程序的段 C语言在编译和连接后,将生成代码段(Text).只读数据段(ROData)和读写数据段(RWData).在运行时,除了以上三个区域外,还包括未初始化数据段(BSS)区域和堆(Heap) ...
- c语言 const常量作用,C语言 const常量讲解
//const的本质 //const本质上是伪常量,无法用于数组初始化以及全局变量初始化 //原因在于const仅仅限定变量无法直接赋值,但是却可以通过指针间接赋值 //例如局部常量在栈区,而不在静态 ...
- c语言 字母 八进制表示'/1011',C语言C语言第一课:C语言概述为什么学习C语言怎样学习C语言.DOC...
[摘要]C语言 第一课: C语言概述 为什么学习C语言 怎样学习C语言 参考资料 ----------------------------------------------------------- ...
- bool类型返回值_Python 到底是强类型语言,还是弱类型语言?
推荐三个网站 1.Python进阶知识: http://python.iswbm.com 2.Python魔法技巧: http://magic.iswbm.com 3.PyCharm 手册: htt ...
最新文章
- java获取24小时制时间格式_java 日期格式时间24小时制
- 【转】java接口的性能测试
- Redis专题-持久化方式
- 实现strstr(****)
- 51Nod - 1381 硬币游戏
- react学习(47)----react中initialValue和value不能一起定义
- linux的进程pcd,LINUX下查看点云图————point cloud(.ply .vtk .pcd)
- 初识人工智能(一):数据分析(二):numpy科学计算基础库(一)
- 《Python编程从入门到实践》记录之文件异常(try-except-else代码块)
- 基于前端javascript的搜索功能
- 百度图神经网络学习——day05:图神经网络进阶模型
- 从《Java核心技术》纵览Java全貌
- GAN详解与PyTorch MINIST手写数字生成实战
- day53_电力系统_ztree动态生成权限控制
- 如何查询出指定地点对应的经纬度(高德地图)
- 各平台安装OpenCV
- 蓝底换白底边缘不干净_蓝底换白底【解决措施】
- 奉劝那些想涨工资的程序员,这些 IT 大神们都在用的网站,你越早知道越好(建议收藏)!!...
- WordPress 元老 Alex King 逝世
- App上架到各大安卓应用***流程