数据结构之链表_list

来源:互联网 发布:河马在线网络贷款 编辑:程序博客网 时间:2024/05/16 05:06
#ifndef LIST_H_INCLUDED
#define LIST_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 List
{
private:
 Node<T>* head;
 Node<T>* tail;
 int size;
public:
 List<T>() :size(0),head(NULL),tail(NULL){}
 ~List<T>();
 void Delete(const T& item);
 void Insert(const T& item);
 Node<T>* Search(const T& item);
 bool Empty(){ return head == NULL; }
 int GetSize()const{ return size;}
 void Show();
};


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


template <class T>
void List<T>::Insert(const T& item)
{
 if (head == NULL)
 {
  head =tail= new Node<T>(item);
 }
 else
 {
  tail->next = new Node<T>(item);
  tail = tail->next;
 }
 size++;
}

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


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

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

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

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

}

template <class T>
void List<T>::Show()
{
 Node<T>* p = head;
 while (p != NULL)
 {
  std::cout << p->data<<" ";
  p = p->next;
 }
}
#endif



1 0