链栈的c++实现
链栈是借用单链表实现的栈。其不同于顺序栈之处在于:
1、链栈的空间是程序运行期间根据需要动态分配的,机器内存是它的上限。而顺序栈则是
静态分配内存的。
2、链栈动态分配内存的特性使得它一般无需考虑栈溢出的问题。
链栈的的组织结构如下图所示。容易发现其是架构的单链表的基础之上的。
下面介绍下我用C++实现的链栈,VC6下调试。
1、文件的组织结构
2、ls.h链栈类的说明
- #ifndef _LS_H_
- #define _LS_H_
- typedef int dataType;
- struct node //链栈节点
- {
- dataType data; //数据域
- node *next; //指针域
- };
- class ls
- {
- public:
- ls();
- ~ls();
- void push(dataType var); //压栈
- void pop(); //出栈.出栈之前并不判断栈是否已空.需要通过isEmpty()判断
- dataType stackTop(); //取栈顶元素,栈顶无变化.不提前判断栈是否为空
- bool isEmpty(); //判空.空返回true,反之返回false
- //bool isFull(); //判满.链栈是动态分配内存空间的,无需判满
- private:
- node *top; //栈顶指针.top=NULL表示为空栈
- };
- #endif
3、ls.cpp链栈类成员函数的定义
- #include <iostream>
- #include "ls.h"
- using namespace std;
- ls::ls()
- {
- top = NULL; //top=NULL表示链栈为空
- }
- ls::~ls()
- {
- node *ptr = NULL;
- while(top != NULL) //循环释放栈节点空间
- {
- ptr = top->next;
- delete top;
- top = ptr;
- }
- }
- void ls::push(dataType var)
- {
- node *ptr = new node;
- ptr->data = var; //新栈顶存值
- ptr->next = top; //新栈顶指向旧栈顶
- top = ptr; //top指向新栈顶
- }
- void ls::pop()
- {
- node *ptr = top->next; //预存下一节点的指针
- delete top; //释放栈顶空间
- top = ptr; //栈顶变化
- }
- dataType ls::stackTop()
- {
- return top->data; //返回栈顶元素,并不判断栈是否已空
- }
- bool ls::isEmpty()
- {
- return top == NULL; //栈顶为NULL表示栈空
- }
4、main.cpp
- #include <iostream>
- #include "ls.h"
- using namespace std;
- int main()
- {
- ls exp;
- int i = 0;
- for(i=0;i<3;++i)
- {
- exp.push(i);
- }
- for(i=0;i<3;i++)
- {
- if(!exp.isEmpty())
- {
- cout<<exp.stackTop()<<endl;
- exp.pop();
- }
- }
- return 0;
链栈的c++实现的更多相关文章
- 03链栈_LinkStack--(栈与队列)
#include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...
- 从零开始学C++之数据封装与抽象:分别用C和C++来实现一个链栈
下面通过分别用C和C++来实现一个链栈(链表实现),从中体会数据封装抽象的思想: C语言实现: C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
- java与数据结构(6)---java实现链栈
栈之链式存储结构链栈 链栈 栈的链式存储结构成为链栈.链栈是没有头结点,头结点就是栈顶指针top. 代码结构 package list; public interface Stackable;公共接口 ...
- 链栈之C++实现
链栈是借用单链表实现的栈.其不同于顺序栈之处在于: 1.链栈的空间是程序运行期间根据需要动态分配的,机器内存是它的上限.而顺序栈则是 静态分配内存的. 2.链栈动态分配内存的特性使得它一般无需考虑栈溢 ...
- C++实现链栈的基本操作
之前对顺序栈写了基本操作,认为有必要也动手练练栈的链表实现. 对于链栈,一般不会出现栈满的情况. 链栈头文件定义例如以下: #ifndef CSTOCK_H_ #define CSTOCK_H_ ty ...
- 【小白成长撸】--链栈(C语言版)
// 链栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <st ...
- C语言简单实现链栈基本几个功能(适合新手看,大神可指正)
接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...
- 数据结构——Java实现链栈
一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 链栈是指采用链式存储结构实现的 ...
- C语言实现链栈的初始化&进栈&出栈&读取栈顶元素
/*链表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typede ...
- C语言简单实现链栈基本几个功能
接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...
随机推荐
- XPS 13 9360安装ubuntu 18
XPS 13 9360安装ubuntu 18 标签(空格分隔): Linux 操作系统 1. 雷电口驱动bug 提示更新雷电口驱动bug(thunderbolt nvm for xps noteboo ...
- Android4.4 ContentResolver查询图片无效 及 图库删除 添加图片后,ContentResolver不更新的问题解决
问题背景: 參考链接 做了一个图片浏览,用ContentResolver扫描图库照片.且严格依照时间拍摄顺序排好序显示在listview里.例如以下图所看到的: watermark/2/text/aH ...
- Android开发学习之TabView选项卡具体解释 -- 基于Android4.4
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/he90227/article/details/24474197 直接上代码 -- 基于Android ...
- ACM-ICPC(10/23)
贪心 区间相关问题 选择不相交区间: hdu 2037 给定一些区间,选择尽量多的区间,他们互相不交叉.(活动安排问题) 分析:贪心思路是解决活动安排问题的好方案. 按照区间右端点排序,从前往后遍历, ...
- 2018.10.17 学习如何使用Shiro
参考学习https://www.javazhiyin.com/19502.html
- 生成二维码、微信自定义分享到朋友圈、ipa不从应用商店安装
生成二维码网址:http://www.liantu.com/ 微信自定义分享到朋友圈:http://www.cnblogs.com/memor-y/p/6728179.html ipa不从应用商店安装 ...
- maven的.m2文件夹
安装完maven是没有.m2文件夹的. Maven缺省的本地仓库路径为${user.home}/.m2/repository 在linux中以.开头的文件夹都是隐藏的.当使用maven命令的时候,ma ...
- HTML5标签应用
<!doctype html> <html> <head> <style> /* *{border:1px solid red;height:20px} ...
- PAT 1063. Set Similarity
1063. Set Similarity 题目大意 给定 n 个集合, k 个询问, 求任意两个集合的并集和合集. 思路 一道裸的考察 STL 中 set 的题, 我居然还用 hash 错过一遍, 用 ...
- Unicode转化为汉字
+ (NSString *)replaceUnicode:(NSString *)unicodeStr { NSString *tempStr1 = [unicodeStrstringByReplac ...