• 链式栈的类定义


    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
    

      

  • 相关阅读:
    POJ 3468 A Simple Problem with Integers
    BZOJ 4430 Guessing Camels
    POJ 2309 BST
    POJ 1990 MooFest
    cf 822B Crossword solving
    cf B. Black Square
    cf 828 A. Restaurant Tables
    Codefroces 822C Hacker, pack your bags!
    [HDU 2255] 奔小康赚大钱
    [BZOJ 1735] Muddy Fields
  • 原文地址:https://www.cnblogs.com/blacop/p/6656461.html
Copyright © 2020-2023  润新知