zoukankan      html  css  js  c++  java
  • 链栈

        今天,我们一起用C++写链栈,具体如下。

    LinkStack.h具体内容:

    #include "StackNode.h"
    
    template<typename Type> class LinkStack{
    public:
    	LinkStack() :m_ptop(NULL){}
    	~LinkStack(){
    		MakeEmpty();
    	}
    
    public:
    	void MakeEmpty();           //make the stack empty
    	void Push(const Type item); //push the data
    	Type Pop();                 //pop the data
    	Type GetTop() const;        //get the data
    	void Print();               //print the stack
    
    	bool IsEmpty() const{
    		return m_ptop == NULL;
    	}
    
    private:
    	StackNode<Type> *m_ptop;
    };
    
    template<typename Type> void LinkStack<Type>::MakeEmpty(){
    	StackNode<Type> *pmove;
    	while (m_ptop != NULL){
    		pmove = m_ptop;
    		m_ptop = m_ptop->m_pnext;
    		delete pmove;
    	}
    }
    
    template<typename Type> void LinkStack<Type>::Push(const Type item){
    	m_ptop = new StackNode<Type>(item, m_ptop);
    }
    
    template<typename Type> Type LinkStack<Type>::GetTop() const
    {
    	if (IsEmpty()){
    		cout << "There is no elements!" << endl;
    		exit(1);
    	}
    	return m_ptop->m_data;
    }
    
    template<typename Type> Type LinkStack<Type>::Pop()
    {
    	if (IsEmpty()){
    		cout << "There is no elements!" << endl;
    		exit(1);
    	}
    	StackNode<Type> *pdel = m_ptop;
    	m_ptop = m_ptop->m_pnext;
    	Type temp = pdel->m_data;
    	delete pdel;
    	return temp;
    }
    
    template<typename Type> void LinkStack<Type>::Print(){
    	StackNode<Type> *pmove = m_ptop;
    	cout << "buttom";
    	while (pmove != NULL){
    		cout << "--->" << pmove->m_data;
    		pmove = pmove->m_pnext;
    	}
    	cout << "--->top" << endl << endl << endl;
    }
    StackNode.h具体内容:

    template<typename Type> class LinkStack;
    
    template<typename Type> class StackNode{
    private:
    	friend class LinkStack < Type > ;
    	StackNode(Type dt, StackNode<Type> *next = NULL) :m_data(dt), m_pnext(next){}
    
    private:
    	Type m_data;
    	StackNode<Type> *m_pnext;
    };
    main.cpp具体内容:

    #include <iostream>
    using namespace std;
    #include "LinkStack.h"
    int main(){
    	LinkStack<int> stack;
    	int init[10] = { 1, 3, 5, 7, 4, 2, 8, 0, 6, 9 };
    	for (int i = 0; i < 10; i++){
    		stack.Push(init[i]);
    	}
    	stack.Print();
    	cout << stack.Pop() << endl;
    	stack.Print();
    	cout << stack.GetTop() << endl;
    	stack.Print();
    	cout << stack.Pop() << endl;
    	stack.Print();
    	stack.MakeEmpty();
    	stack.Print();
    	cin.get();
    	return 0;
    }
    运行效果如图1所示:

                                                                                                                                       图1 运行效果

  • 相关阅读:
    ie浏览器报错 DOM7009 无法解码 URL 处的图像 问题的解决方法
    javascript拷贝节点cloneNode()使用介绍
    动态构建 urlpatterns
    request属性
    用户分组权限(模型--登录自带字段)
    模型字段设为可选
    模型 命令
    模板 templates
    动态url加载
    APScheduler实现定时任务
  • 原文地址:https://www.cnblogs.com/new0801/p/6176919.html
Copyright © 2011-2022 走看看