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

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++实现的更多相关文章

  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++实现链栈的基本操作

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. java--异常处理总结

    [在程序中抛出异常] 在程序中抛出异常,一定要使用关键字throw. throw+异常实例对象. public class Demo2 { public static void main(String ...

  2. VC2008如何生成及使用DLL(图文并茂,完整版)

    博客分类: Dot net VC2008 DLL Dot net   生成.使用DLL看起来简单,但做起来才发现还是有一些地方需要注意的. 1. 打开VS2008,新建一个VC工程,选择Win32类型 ...

  3. Oracle多实例的配置方法

    SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME /dbhome_2) (PROGRAM ...

  4. HDU4544 湫湫系列故事――消灭兔子

    HDU 4544 Tags: 数据结构,贪心 Analysis: 将兔子的血量从大到小排序,将箭的杀伤力从大到小排序,对于每一个兔子血量, 将比他大的杀伤力大的剑压入优先队列,优先队列自己重写,让它每 ...

  5. Swift UI开发初探

    今天凌晨Apple刚刚发布了Swift编程语言,Swift是供iOS和OS X应用编程的新编程语言.相信很多开发者都在学习这门新语言. 废话不多说,下面我就来学习使用Swift创建一个简单的UI应用程 ...

  6. 服务启动错误1053,一例解决方案(给用户添加NetworkService权限)

    WIndows XP的服务中,有一个服务需要以NT  AUTHORITY/NetworkService用户启动,但怎么也启动不起来,使用本地系统帐户启动没有任何问题,但是换成NetworkServic ...

  7. ajax动态加载的图标

    http://www.ajaxload.info/ 这个网站可以动态生成ajax加载样式的小图片,git格式,挺不错推荐给大家

  8. 【Unity技巧】使用单例模式Singleton

    这几天想把在实习里碰到的一些好的技巧写在这里,也算是对实习的一个总结.好啦,今天要讲的是在Unity里应用一种非常有名的设计模式——单例模式. 开场白 单例模式的简单介绍请看前面的链接,当然网上还有很 ...

  9. 编写自定义的JDBC框架与策略模式

    本篇根据上一篇利用数据库的几种元数据来仿造Apache公司的开源DbUtils工具类集合来编写自己的JDBC框架.也就是说在本篇中很大程度上的代码都和DbUtils中相似,学完本篇后即更容易了解DbU ...

  10. perl uri_escape(urlencode ) 转换

    [root@wx03 lib]# cat a1.pl #引入模块 use URI::Escape; #urlencode $encoded = uri_escape("[中均]") ...