線性連結串列的實現和操作
阿新 • • 發佈:2019-02-07
本次實現的是線性連結串列的操作,和上次單鏈表不同在於,上次只實現了表頭的插入和刪除,這次是對線性表的整體實現插入和刪除
廢話不多說,直接看程式碼,linked_LList.h
舉例說明上面操作,linked_LList_main.cpp#include<iostream> using namespace std; template <class T> struct node{ T d; node *next; }; template <class T> class linked_LList{ private: node<T> *head; public: linked_LList(); void prt_linked_LList(); void ins_linked_LList(T,T); int del_linked_LList(T); }; template <class T> linked_LList<T>::linked_LList(){ head=NULL; return; } template <class T> void linked_LList<T>::prt_linked_LList(){ node<T> *p; p=head; if(p==NULL){cout<<"Empty linked list!"<<endl;return;} do{ cout<<p->d<<endl; p=p->next; }while(p!=NULL); return; } template <class T> void linked_LList<T>::ins_linked_LList(T x,T b){ node<T> *p,*q; p=new node<T>; p->d=b; if(head==NULL){head=p;p->next=NULL;return;}//empty if(head->d==x){p->next=head;head=p;return;}//first node q=head; while((q->next!=NULL)&&(((q->next)->d)!=x)) q=q->next; p->next=q->next;q->next=p; return; } template <class T> int linked_LList<T>::del_linked_LList(T x){ node<T> *p,*q; if(head==NULL) return 0; if((head->d)==x) { p=head->next; delete head; head=p; return 1; } while((q->next!=NULL)&&(((q->next)->d)!=x)) q=q->next; if(q->next==NULL) return 0; p=q->next;q->next=p->next; delete p; return 1; }
這次圖就不截了,不過簡單的說明一下,對於連結串列最基本的操作,插入和刪除。#include"linked_LList.h" int main(){ linked_LList<int> s; cout<<"1 ouput the element"<<endl; s.prt_linked_LList(); s.ins_linked_LList(10,10); s.ins_linked_LList(10,20); s.ins_linked_LList(10,30); s.ins_linked_LList(40,40); cout<<"2 ouput the element"<<endl; s.prt_linked_LList(); if(s.del_linked_LList(30)) cout<<"delete:30"<<endl; else cout<<"there is no 30"<<endl; if(s.del_linked_LList(50)) cout<<"delete:50"<<endl; else cout<<"there is no 50"<<endl; cout<<"3 ouput the element"<<endl; s.prt_linked_LList(); return 0; }
關於插入:
首先,插入,要明白是要把什麼東西插入到什麼位置,所以2個引數,x和b,在x前面插入b。
位置就有3種情況:
1.如果本來就是空連結串列?那麼此時b這個元素自然是表頭,head和p同時指向這個位置。
2.假如是一個頭結點?那麼就是上次介紹的單鏈表,p指向head,再由head指到p就可以了,(指向:p->next=head,指到:head=p)
3.如果是中間的某個結點?首先找到要插入位置的前一個節點,如何找,上面的while迴圈。
然後,就是就是連線進去,也就是p指向q的指向,q的指向再到p,來回就是這樣的。
關於刪除:
1.要刪除什麼?2.先說到底有沒有這個元素?
所以3種情況:
1.如果是空表?那麼就沒什麼好刪除的,退出;
2.如果是一個元素頭結點?和上面的是一個道理
3.如果是中間的某個元素?
3.1.假如遍歷完,沒有?那自然不用刪除
3.2.發現元素,這個元素的前一個結點為q,自己為p,所以q指向到p的指向,釋放p,就可以了。