數據結構入門小結之鏈表

最近複習數據結構,既是爲了找工作,也是提升內功的一個必經之路。

1.單鏈表:

(1) 定義:

template <typename T>
strcut Node
{
 T data;
 sturct Node* next;
};   

            

(2)構造:

template <typename T>
LinkList<T>::LinkList(T a[], int n)    //頭插法建立單鏈表
{
 Node<T>* front  = new Node<T>;
 front->next = NULL;
 for(int i = n - 1; i >= 0; i--)
 {
  Node<T>* s = new Node<T>;
  s->data = a[i];
  s->next = front->next;
  front->next = s;
 }

}

template <typename T>
LinkList<T>::LinkList(T a[], int n)     //尾插法建立單鏈表
{
   Node<T>* front = new Node<T>;
   Node<T>* rear = new Node<T>;
   for (int i = 0; i < n; i++)
   {
    Node<T>* s = new Node<T>;
    s->data = a[i];
    rear->next = s;
    rear = s;
   }
   rear->next = NULL;
}

 

(3)析構:

template <typename T>
LinkList<T>::~LinkList()
{
 Node<T>* p = front;
 while(p)
 {
  front = p;
  p = p->next;
  delete front;
 }
}

 (4)查找:

template <typename T>
T* ListLink<T>::Get(int i)           //按位查找
{
 Node<T>* p = front->next;
 while(p && j != i)
 {
  p = p->next;
  ++j;
 }
 if (!p)
  throw "wrong";
 else
  return p->data;
}

template <typename T>
int ListLink<T>::Locate(T value)   //按值查找
{
 Node<T>* p = front->next;
 int j = 1;
 while(p)
 {
  if(p->data == value)
   return j
  p = p->next;
  ++j;
 }
 return -1;
}

 (5)插入:

template <typename T>
void ListLink<T>::Insert(int i, T value)  //在第i個位置上插入值爲value的新元素
{
	Node<T>* p = front;
	if(i != 1)
		p = Get(i-1);
	if (p)
	{
		Node<T>* s = new Node<T>;
		s->data = value;
		s->next = p->next;
		p->next = s;
	}
	else
		throw "wrong";
}

有前插、後插以及O(1)的改進前插操作

 (6)刪除:

template <typename T>
T ListLink<T>::DeleteNode(int i) //刪除第i個元素,並將該元素返回
{
	Node<T>* p = front;
	if(i != 1)
		p = Get(i-1);
	Node<T>* q = p->next;
	p->next = q->next;
	T value = q->data;
	delete q;
	return value;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章