链栈之C++实现
来源:互联网 发布:淘宝贷款15万可信么 编辑:程序博客网 时间:2024/05/21 03:26
链栈是借用单链表实现的栈。其不同于顺序栈之处在于:
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语言实现之链栈
- 数据结构之栈(C实现)
- 特殊线性表之栈--C实现
- 数据结构C语言实现之顺序栈
- 数据结构之单链表实现栈(C++)
- 数据结构之---C语言实现共享栈
- 数据结构之栈的c语言实现
- 数据结构之栈(C语言实现)
- 数据结构之 栈(C语言实现)
- 数据结构C语言实现之链队列
- 数据结构之链表(C实现)
- c语言之链表的实现
- 数据结构之链表(C实现)
- 单链表之C实现
- C链栈实现
- 数据结构之---C语言实现括号匹配(栈实现)
- 链表的C语言实现之单链表的实现
- 链表的C语言实现之单链表的实现
- 黑马程序员——Java基础语法(三)---数组
- CAsyncSocket::OnSend的触发条件
- SQL视图和多表连接
- .net Cookie原理与使用
- 一道困扰我许久的while循环题
- 链栈之C++实现
- iOS多线程GCD
- C#的几种格式转换
- Java开发中的23种设计模式详解
- uva 10602 Editor Nottoobad(排序)
- 计算机视觉方面的代码
- java Math.round()
- C 笔记
- obsidium 重定位