Open main menu

CDOT Wiki β

Q1sol the solution

Revision as of 17:15, 4 August 2010 by Catherine.leung (talk | contribs)

//to write a linked list like structure, you must begin with a node. Without the node, //you can't have a linked list. template <class T> struct Node{

 T data_;
 Node<T>* next_;

};

template <class T> class Stack{

 Node<T>* start_;

public:

 /*this constructor initializes the stack to an empty stack*/
 Stack();
 /*this function adds a piece of data of type T to the stack and returns
   nothing*/
 void push(T data);
 /*removes and returns a piece of data from the stack.  If the stack is
   empty throw the string "empty stack"*/
 T pop()
 /*returns true if empty, false otherwise*/
 bool isempty();

}; template <class T> Stack<T>::Stack(){

 start_=NULL;

}

template <class T> void Stack<T>::push(T data){

 Node<T>* nn;
 nn=new Node<T>;
 nn->data_=data;
 nn->next_=start_;
 start_=nn;

}

template <class T> T Stack<T>::pop(){

 T rc;
 if(isempty()){
   throw "Empty Stack";
 }
 else{  //this else is optional because if you throw an exception,rest
   rc=start_->data_;
   Node<T>* rm=start_;
   start_=start_->next;
   delete rm;
 }
 return rc;

}

template <class T> bool Stack<T>::isempty(){

 bool rc=true;
 if(start_){
   rc=false;
 }
 return rc;

}

//to write a linked list like structure, you must begin with a node. Without the node, //you can't have a linked list. template <class T> struct Node{

 T data_;
 Node<T>* next_;

};

template <class T> class Stack{

 Node<T>* start_;

public:

 /*this constructor initializes the stack to an empty stack*/
 Stack();
 /*this function adds a piece of data of type T to the stack and returns
   nothing*/
 void push(T data);
 /*removes and returns a piece of data from the stack.  If the stack is
   empty throw the string "empty stack"*/
 T pop()
 /*returns true if empty, false otherwise*/
 bool isempty();

}; template <class T> Stack<T>::Stack(){

 start_=NULL;

}

template <class T> void Stack<T>::push(T data){

 Node<T>* nn;
 nn=new Node<T>;
 nn->data_=data;
 nn->next_=start_;
 start_=nn;

}

template <class T> T Stack<T>::pop(){

 T rc;
 if(isempty()){
   throw "Empty Stack";
 }
 else{  //this else is optional because if you throw an exception,rest
   rc=start_->data_;
   Node<T>* rm=start_;
   start_=start_->next;
   delete rm;
 }
 return rc;

}

template <class T> bool Stack<T>::isempty(){

 bool rc=true;
 if(start_){
   rc=false;
 }
 return rc;

}

</code>