#include<iostream>
#include<stdlib.h>
using namespace std; typedef struct node
{
int data;
struct node *pNext;
}NODE,*PNODE; typedef struct stack
{
PNODE pTop;
PNODE pBottom;
}STACK,*PSTACK; bool ininStack(PSTACK);
bool pushStack(PSTACK , int );
int lengthStack(PSTACK);
bool traverseStack(PSTACK);
bool pop(PSTACK);
bool isempty(PSTACK pS);
void claer(PSTACK pS);
int main()
{
STACK S;
ininStack(&S);
pushStack(&S,1);
pushStack(&S,2);
pushStack(&S,3);
pushStack(&S,4);
lengthStack(&S);
traverseStack(&S);
cout<<"长度为:"<<lengthStack(&S)<<endl;
pop(&S);
traverseStack(&S);
cout<<"长度为:"<<lengthStack(&S)<<endl;
claer(&S);
return 0;
} bool ininStack(PSTACK pS)//初始化栈
{
PNODE pN = (PNODE)malloc(sizeof(NODE));
if(pN == NULL)
{
cout<<"初始化失败!"<<endl;
exit(-1);
}
pS->pTop = pN;
pS->pBottom = pN;
pS->pBottom->pNext = NULL;
return true ;
} bool pushStack(PSTACK pS, int val)//压栈
{
PNODE pNew = (PNODE)malloc(sizeof(NODE));
if(pNew == NULL)
{
cout<<"压栈失败!"<<endl;
exit(-1);
}
pNew->data = val;
pNew->pNext = pS->pTop;
pS->pTop = pNew;
return true;
} bool traverseStack(PSTACK pS)//输出
{
PNODE p = pS->pTop;
while(p->pNext!=NULL)
{
cout<<p->data<<endl;
p=p->pNext;
}
return true;
} bool isempty(PSTACK pS)//是否为空
{
if(pS->pTop == pS->pBottom)
return true;
else
return false;
} bool pop(PSTACK pS)//出栈
{
if(isempty(pS))
{
cout<<"栈为空!"<<endl;
return false;
}
cout<<"正在出栈..."<<endl;
PNODE p;
p = pS->pTop;
pS->pTop = p->pNext;
delete(p);
p=NULL;
return true;
} int lengthStack(PSTACK pS)//计算栈长度
{
int i=0;
PNODE p=pS->pTop;
while(p!=pS->pBottom)
{
i++;
p=p->pNext;
}
return i;
} void claer(PSTACK pS)//清栈
{
if(isempty(pS))
{
cout<<"此为空栈!"<<endl;
exit(0);
}
PNODE j;
while(pS->pTop != pS->pBottom)
{
j = pS->pTop;
pS->pTop = pS->pTop->pNext;
delete(j);
j = NULL;
}
if(pS->pTop == pS->pBottom)
cout<<"清栈完成!"<<endl;
return ;
}

CPP 栈 示例的更多相关文章

  1. 应用编排服务之ELK技术栈示例模板详解

    日志对互联网应用的运维尤为重要,它可以帮助我们了解服务的运行状态.了解数据流量来源甚至可以帮助我们分析用户的行为等.当进行故障排查时,我们希望能够快速的进行日志查询和过滤,以便精准的定位并解决问题. ...

  2. CPP链表示例

    #include<iostream> #include<stdlib.h> using namespace std; typedef struct Student_data { ...

  3. (hdu step 8.1.1)ACboy needs your help again!(STL中栈和队列的基本使用)

    题目: ACboy needs your help again! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...

  4. 栈的链式存储 - API实现

    基本概念 其它概念详情參看前一篇博文:栈的顺序存储 - 设计与实现 - API实现 这里也是运用了链表的链式存储API高速实现了栈的API. 代码: // linkstack.h // 链式存储栈的A ...

  5. 顺序栈之C++实现

    顺序栈就是用顺序表(数组)实现的栈.其组织形式如下图所示: 下面介绍下我用C++实现的顺序栈,在VC6下调试通过.不足之处还请指正. 1.文件组织 2.ss.h栈类的声明及宏的定义 #ifndef _ ...

  6. .NET中 类型,对象,线程栈,托管堆在运行时的关系

    .NET中 类型,对象,线程栈,托管堆在运行时的关系 The Relationship at Run Time between Types,Objects,A Thread's Stack,and T ...

  7. [读书心得] .NET中 类型,对象,线程栈,托管堆在运行时的关系

    .NET中 类型,对象,线程栈,托管堆 在运行时的关系 The Relationship at Run Time between Types,Objects,A Thread's Stack,and ...

  8. Java数据结构和算法 - 栈和队列

    Q: 栈.队列与数组的区别? A: 本篇主要涉及三种数据存储类型:栈.队列和优先级队列,它与数组主要有如下三个区别: A: (一)程序员工具 数组和其他的结构(栈.队列.链表.树等等)都适用于数据库应 ...

  9. h2engine游戏服务器设计之聊天室示例

    游戏服务器设计之聊天室示例 简介 h2engine引擎建群以后,有热心网友向我反馈,想尝试h2engine但是没有服务器开发经验觉得无从入手,希望我能提供一个简单明了的示例.由于前一段时间工作实在忙碌 ...

随机推荐

  1. Java高并发之从零到放弃

    前言 本篇主要讲解如何去优化锁机制或者克服多线程因为锁可导致性能下降的问题 ThreadLocal线程变量 有这样一个场景,前面是一大桶水,10个人去喝水,为了保证线程安全,我们要在杯子上加锁导致大家 ...

  2. HiHocoder1419 : 后缀数组四·重复旋律4&[SPOJ]REPEATS:Repeats

    题面 Hihocoder Vjudge Sol 题目的提示说的也非常好 我对求\(LCP(P - L + len \% l, P + len \% L)\)做补充 \(len=LCP(P, P + L ...

  3. Mysql 忘记管理员密码更改

    对管理员设置密码 第一种方式: #mysqladmin -u root password 'new-password'; #mysqladmin -u root -h localhost passwo ...

  4. handsontable 渲染实例

    单元格选择完成后将触发事件afterSelectionEnd, 然后在js中: hot.addHook('afterSelectionEnd', function(r, c, r2, c2){ // ...

  5. php seaslog的使用

    今天有幸在慕课网看到了 关于php日志处理工具  seasLog 的使用视频,本着好奇看完了该视频,觉得不错,便自己也倒腾了下,现在整理出来 seaslog github: https://githu ...

  6. 变量类型、sprintf、不同类型之间的混合运算

    char 默认signed char 取值范围-128~127 unsigned char 取值范围0~255 unsigned char = 0 与unsigned char =‘0’是等效的 sp ...

  7. Golang的CSP很酷?其实.NET也可以轻松完成

    说起Golang(后面统称为Go),就想到他的高并发特性,在深入一些就是 Goroutine.在大家被它优雅的语法和简洁的代码实现的高并发程序所折服时,其实C#/.NET也可以很容易的做到.今天我们来 ...

  8. NYOJ 题目12喷水装置(二)

    #include<iostream> #include<algorithm> #include<cmath> using namespace std; struct ...

  9. Genymotion模拟器的安装及常见问题解决方法

    Genymotion是很好用很快的一款Android模拟器. 我们使用的时候下载一个免费版的就足够用了. 官网下载地址:http://www.genymotion.net/ 不过这个软件下载之前必须注 ...

  10. 【前端单元测试入门03】Sinon

    前端测试存在的问题 在讲Sinon之前,我们得先讲一下在学习了Mocha.chai以及enzyme之后,我们的前端测试还存在的一些问题. 比如前台测试需要与后台交互,获取后台数据后再根据相应数据进行测 ...