首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

链栈之C++兑现

2013-10-08 
链栈之C++实现链栈是借用单链表实现的栈。其不同于顺序栈之处在于:1、链栈的空间是程序运行期间根据需要动态

链栈之C++实现

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

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

静态分配内存的。

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

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

链栈之C++兑现

 

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

1、文件的组织结构

链栈之C++兑现

 

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;}

热点排行