• 链栈之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;
    }
  • 相关阅读:
    C语言学习趣事_BT_C_Code_混乱编程代码分析_1
    随想系列_6_终于被我发现Microsoft的一个错误了
    C语言学习趣事_经典面试题系列_2
    C++_系列自学课程_第_2_课_牛刀小试
    PLC_自动化控制系统_1_简说自动化控制系统
    随想系列_5_乱七八糟
    Android Handler使用
    Android Layout 布局属性
    MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序【转】
    AndroidMenifest 有关SdkVersion 说明
  • 原文地址:https://www.cnblogs.com/pangblog/p/3293983.html
Copyright © 2020-2023  润新知