2013-08-30 20:58 1876人阅读 评论(0) 收藏 举报

链栈是借用单链表实现的栈。其不同于顺序栈之处在于:

1、链栈的空间是程序运行期间根据需要动态分配的,机器内存是它的上限。而顺序栈则是

静态分配内存的。

2、链栈动态分配内存的特性使得它一般无需考虑栈溢出的问题。

链栈的的组织结构如下图所示。容易发现其是架构的单链表的基础之上的。

下面介绍下我用C++实现的链栈,VC6下调试。

1、文件的组织结构

2、ls.h链栈类的说明

  1. #ifndef _LS_H_
  2. #define _LS_H_
  3. typedef int dataType;
  4. struct node                   //链栈节点
  5. {
  6. dataType data;            //数据域
  7. node *next;               //指针域
  8. };
  9. class ls
  10. {
  11. public:
  12. ls();
  13. ~ls();
  14. void push(dataType var); //压栈
  15. void pop();              //出栈.出栈之前并不判断栈是否已空.需要通过isEmpty()判断
  16. dataType stackTop();     //取栈顶元素,栈顶无变化.不提前判断栈是否为空
  17. bool isEmpty();          //判空.空返回true,反之返回false
  18. //bool isFull();         //判满.链栈是动态分配内存空间的,无需判满
  19. private:
  20. node *top;               //栈顶指针.top=NULL表示为空栈
  21. };
  22. #endif

3、ls.cpp链栈类成员函数的定义

  1. #include <iostream>
  2. #include "ls.h"
  3. using namespace std;
  4. ls::ls()
  5. {
  6. top = NULL;            //top=NULL表示链栈为空
  7. }
  8. ls::~ls()
  9. {
  10. node *ptr = NULL;
  11. while(top != NULL)     //循环释放栈节点空间
  12. {
  13. ptr = top->next;
  14. delete top;
  15. top = ptr;
  16. }
  17. }
  18. void ls::push(dataType var)
  19. {
  20. node *ptr = new node;
  21. ptr->data = var;        //新栈顶存值
  22. ptr->next = top;        //新栈顶指向旧栈顶
  23. top = ptr;              //top指向新栈顶
  24. }
  25. void ls::pop()
  26. {
  27. node *ptr = top->next;  //预存下一节点的指针
  28. delete top;             //释放栈顶空间
  29. top = ptr;              //栈顶变化
  30. }
  31. dataType ls::stackTop()
  32. {
  33. return top->data;       //返回栈顶元素,并不判断栈是否已空
  34. }
  35. bool ls::isEmpty()
  36. {
  37. return top == NULL;     //栈顶为NULL表示栈空
  38. }

4、main.cpp

  1. #include <iostream>
  2. #include "ls.h"
  3. using namespace std;
  4. int main()
  5. {
  6. ls exp;
  7. int i = 0;
  8. for(i=0;i<3;++i)
  9. {
  10. exp.push(i);
  11. }
  12. for(i=0;i<3;i++)
  13. {
  14. if(!exp.isEmpty())
  15. {
  16. cout<<exp.stackTop()<<endl;
  17. exp.pop();
  18. }
  19. }
  20. return 0;

链栈的c++实现的更多相关文章

  1. 03链栈_LinkStack--(栈与队列)

    #include "stdio.h" #include "stdlib.h" #include "io.h" #include " ...

  2. 从零开始学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 ...

  3. java与数据结构(6)---java实现链栈

    栈之链式存储结构链栈 链栈 栈的链式存储结构成为链栈.链栈是没有头结点,头结点就是栈顶指针top. 代码结构 package list; public interface Stackable;公共接口 ...

  4. 链栈之C++实现

    链栈是借用单链表实现的栈.其不同于顺序栈之处在于: 1.链栈的空间是程序运行期间根据需要动态分配的,机器内存是它的上限.而顺序栈则是 静态分配内存的. 2.链栈动态分配内存的特性使得它一般无需考虑栈溢 ...

  5. C++实现链栈的基本操作

    之前对顺序栈写了基本操作,认为有必要也动手练练栈的链表实现. 对于链栈,一般不会出现栈满的情况. 链栈头文件定义例如以下: #ifndef CSTOCK_H_ #define CSTOCK_H_ ty ...

  6. 【小白成长撸】--链栈(C语言版)

    // 链栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <st ...

  7. C语言简单实现链栈基本几个功能(适合新手看,大神可指正)

            接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...

  8. 数据结构——Java实现链栈

    一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 链栈是指采用链式存储结构实现的 ...

  9. C语言实现链栈的初始化&进栈&出栈&读取栈顶元素

    /*链表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typede ...

  10. C语言简单实现链栈基本几个功能

            接着上一次的顺序栈,今天我记一下链栈,因为我也是刚学不久,有些地方也稍稍理解不了,所以,一起共勉.我会用我自己结合教材上画的图,争取跟代码一起结合,用文字和图最大化的解释代码,这样的话 ...

随机推荐

  1. 常见WEB开发安全漏洞 原因分析及解决

    目 录 1 会话标识未更新 3 1.1 原因 3 1.2 解决 3 2 SQL注入 3 2.1 原因 3 2.2 解决 5 3 XSS跨站脚本编制 5 3.1 原因 5 3.2 解决 5 4 XSRF ...

  2. Struts的学习-例子

    一.新建空项目user和配置maven实现下面的页面 1.配置内容 2.编写struts.xml实现页面 <!--定义一个useraction--> <package name=&q ...

  3. 增加C盘空间大小

    随着我们使用电脑的时间越来越久,电脑C盘的空间会出现不够用的情况,这时我们需要的就是增加C盘的大小,基本上有两种方式 1.通过系统自带的磁盘管理(有可能没法操作,主要介绍第二种) 2.通过分区软件进行 ...

  4. 笨办法学Python(四十)

    习题 40: 字典, 可爱的字典 接下来我要教你另外一种让你伤脑筋的容器型数据结构,因为一旦你学会这种容器,你将拥有超酷的能力.这是最有用的容器:字典(dictionary). Python 将这种数 ...

  5. April 2 2017 Week 14 Sunday

    You only live once, but if you do it right, once is enough. 人生只有一次,但如果活对了,一次也就够了. Maybe I am going t ...

  6. npm proxy设置网络代理 并使用taobao registry

    npm config set https-proxy http://server:portnpm config set proxy http://server:port npm set registr ...

  7. 给自己的网站加上robots.txt

    今天给自己的网站加了一个robots.txt,在网上收集整理了一些资料,给自己网站也加上了robots.txt ! 顺便给大家分享一下! 一.robots.txt是什么? robots.txt是一个纯 ...

  8. 逻辑回归(分类问题)(Logistic Regression、罗杰斯特回归)

    逻辑回归:问题只有两项,即{0, 1}.一般而言,回归问题是连续模型,不用在分类问题上,且噪声较大,但如果非要引入,那么采用逻辑回归模型. 对于一般训练集: 参数系统为: 逻辑回归模型为:      ...

  9. 【luogu P1314 聪明的质监员】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1314 二分答案 但是计算区间贡献的时候 直接暴力会挂 前缀和加速 #include <cstdio&g ...

  10. JavaEE权限管理系统的搭建(八)--------角色的增删改

    如下图所示,添加角色的同时,要给角色分配权限菜单,关于权限数的显示,我实现了两种方式,普通方式和Ztree方式, 普通方式展示树: 主要代码部分: /** * 进入角色添加页面 * @param mo ...