stack.h

来自「经典vc教程的例子程序」· C头文件 代码 · 共 85 行

H
85
字号
// STACK.H
// Definition of class Stack
#ifndef STACK_H
#define STACK_H

#include <iostream.h>
#include <assert.h>
#include "stacknd.h"

template <class T>
class Stack {
public:
   Stack();              // default constructor
   ~Stack();             // destructor
   void push( T & );     // insert item in stack
   T pop();              // remove item from stack
   int isEmpty() const;  // is the stack empty?
   void print() const;   // output the stack
private:
   StackNode<T> *topPtr;    // pointer to fist StackNode
};

// Member function definitions for class Stack
template <class T>
Stack<T>::Stack() { topPtr = 0; }

template <class T>
Stack<T>::~Stack()
{
   StackNode<T> *tempPtr, *currentPtr = topPtr;

   while ( currentPtr != 0 ) {
      tempPtr = currentPtr;
      currentPtr = currentPtr->nextPtr;
      delete tempPtr;
   }
}

template <class T>
void Stack<T>::push( T &d )
{
   StackNode<T> *newPtr = new StackNode<T>( d, topPtr );

   assert( newPtr != 0 );  // was memory allocated?
   topPtr = newPtr;
}

template <class T>
T Stack<T>::pop()
{
   assert( !isEmpty() );

   StackNode<T> *tempPtr = topPtr;

   topPtr = topPtr->nextPtr;
   T poppedValue = tempPtr->data;
   delete tempPtr;
   return poppedValue;
}

template <class T>
int Stack<T>::isEmpty() const { return topPtr == 0; }

template <class T>
void Stack<T>::print() const
{
   StackNode<T> *currentPtr = topPtr;

   if ( isEmpty() )          // Stack is empty
      cout << "Stack is empty" << endl;
   else {                    // Stack is not empty
      cout << "The stack is:" << endl;

      while ( currentPtr != 0 ) {
         cout << currentPtr->data << ' ';
         currentPtr = currentPtr->nextPtr;
      }

      cout << endl;
   }
}

#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?