链栈之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;
}
  • 6
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值