zoukankan      html  css  js  c++  java
  • 链式栈的类定义

    Stack.h

    #pragma once
    #include "stdafx.h"
    #include "StackNode.h"
    
    //LinkStack,链式栈的类定义
    template <typename T>
    class Stack {
    private:
    	StackNode<T>* top; //cur ptr
    	// 7个方法
    public:
    	//Construct Function()
    	Stack() :top(NULL) {}
    	//DeConstruct Function()
    	~Stack() {
    		StackNode<T>* p; //temp ref domain		 
    		while (top != NULL) { //free()
    			p = top;
    			top = top->next;
    			delete p;
    		}
    	}
    	//Push() 从栈顶压入一个元素
    	void Push(const T & item) {
    		StackNode<T> * p = new StackNode<T>;
    		p->data = item; //赋值
    		p->next = top; //connect cur ptr
    		top = p; //cur ptr move ++
    	}
    	//Pop() 从栈顶弹出一个元素
    	T Pop() {
    		if (IsEmpty()) { //empty stack
    			cerr << "Attempt to pop an empty stack!" << endl;
    			exit(1);
    		}
    		StackNode<T>* p = top; //temp ref domain	
    		T RetValue = p->data; //temp data domain
    		top = top->next; //top-- move
    		delete p; //free() p, else will crash memory
    		return RetValue;
    	}
    	//Peek(),GetTop()
    	T Peek() const {
    		if (IsEmpty()) { //empty stack
    			cerr << "Attempt to pop an empty stack!" << endl;
    			exit(1);
    		}
    		return top->data;
    	}//!_Peek
    	//Clear()
    	void Clear(void) {		
    		//不free()会内存泄漏
    		StackNode<T>* p; //temp ref domain		 
    		while (top != NULL) { //free()
    			p = top;
    			top = top->next;
    			delete p;
    		}
    		this.top = NULL; 
    	}//!_Clear()
    	 //IsEmpty()
    	int IsEmpty(void) const {
    		return top == NULL;
    	}//!_IsEmpty()
    };//!_class Stack
    

      

  • 相关阅读:
    校外实习-7.28
    校外实习-7.27
    校外实习-7.26
    校外实习-7.25
    校外实习-第三周总结
    校外实习-7.22
    校外实习-7.21
    校外实习-7.20
    作业九—总结
    结对编程项目---四则运算(截图总结篇)
  • 原文地址:https://www.cnblogs.com/blacop/p/6656461.html
Copyright © 2011-2022 走看看