数据结构之栈_Stack

来源:互联网 发布:excel数据统计图 编辑:程序博客网 时间:2024/06/05 15:33
#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED
#include<iostream>
template <class T>
struct Node
{
 T data;
 Node<T>* next;
 Node(const T& item, Node<T>* nxt = NULL) :data(item), next(nxt){}
};


template <class T>
class Stack
{
private:
 Node<T>* top;
 int size;
public:
 Stack<T>() : size(0), top(NULL) {}
 ~Stack<T>();
 T Top();
 void Pop();
 void Clear();
 void Delete(const T& item);
 void Push(const T& item);
 Node<T>* Search(const T& item);
 bool Empty(){ return top == NULL; }
 int GetSize()const{ return size; }
 void Show();
};

template <class T>
Stack<T>::~Stack()
{
 Node<T>* p = top;
 while (p != NULL)
 {
  top = p->next;
  delete p;
  p = top;

 }
}


template <class T>
void Stack<T>::Push(const T& item)
{
 if (top == NULL)
 {
  top = new Node<T>(item);
 }
 else
 {
  Node<T>* newTop = new Node<T>(item,top);
  top = newTop;
 }
 size++;
}

template <class T>
void Stack<T>::Pop()
{
 if (Empty())
 {
  std::cout << "栈已空";
  return;
 }

 size--;//肯定存在此节点
 Node<T>* p = top;
 top = top->next;
 delete p;


}

template <class T>
T Stack<T>::Top()
{
 return top->data;
}
template <class T>
Node<T>* Stack<T>::Search(const T& item)
{
 Node<T>* p = top;
 while (p != NULL)
 {
  if (p->data = item)
   return p;
  p = p->next;
 }
 return NULL;
}


template <class T>
void Stack<T>::Delete(const T& item)
{
 Node<T>* p = Search(item);
 if (p == NULL)
 {
  std::cout << "无此节点";
  return;
 }

 size--;//肯定存在此节点
 Node<T>* q = top;
 if (p == q)
 {
  top = p->next;
  delete p;
  return;
 }

 while (q->next != p)
  q = q->next;

 q->next = p->next;
 delete p;

}

template <class T>
void Stack<T>::Clear()
{
 Node<T>* p = top;
 while (p != NULL)
 {
  top = p->next;
  delete p;
  p = top;

 }
 top = NULL;

}

template <class T>
void Stack<T>::Show()
{
 Node<T>* p = top;
 while (p != NULL)
 {
  std::cout << p->data << " ";
  p = p->next;
 }
}
#endif
1 0
原创粉丝点击