C++編程語言是一款應用廣泛的計算機應用語言。我們在這篇文章中為大家介紹的是關於C++單向鏈表的實現方法。希望初學者們可以通過本文介紹的內容充分掌握這方面的知識,並從中體驗到這款語言功能的強大。
C++單向鏈表實現代碼:
- #include < iostream>
- using namespace std;
- template < class T>
- struct node
- {
- //public:
- // 結構體成員默認就是public的
- T data;
- node< T> *next;
- };
- //typedef struct node NODE;
- //typedef NODE *NODEPTR;
- //typedef後面要跟具體的類類型,而不是一個類模版。eg: typedef node< T>
NODE (C++中,實例化結構體時struct可省略)- template < class T>
- class list
- {
- public:
- //以下三個函數要供外部調用,所以要聲明為public,class默認為private。
- /*
- void creat(T &p);
- void print(T p);
- void destroy(T &p);
- */
- //這三個函數的參數有問題,按照下文的實現,我認為應改為如下:
- void creat(T *p);
- void print(T *p);
- void destroy(T *p);
- };
- template< class A>
- //void creat(A &p)
- void list< A>::creat(A *p)
- {
- //class node *q;
- //形參裡的A就是這個程序的node類型
- char ch = 0; //下數第4行cin>>ch 中的ch未定義,在此補充
- A *q = NULL;
- q=p; //必須新增這一句,q用於以後的動態分配
- cout< < "input"< < endl;
- cin>>ch;
- // if(!p) //這個if放在while裡會影響效率,故移到while外邊,
改過程序之後,實際上用不著了- // {
- //p=new struct node;
- //語法錯誤,形參裡的A就是這個程序的node類型
- // p = new A();
- if(ch!='#')
- p->data=ch;
- // }
- cin>>ch;
- while(ch!='#')
- {
- //q->next=new class node;
- //語法錯誤,形參裡的A就是這個程序的node類型
- q->next = new A();
- //q->next=ch;
- //這句應該是給data賦值
- q->next->data = ch;
- qq = q->next; //必須新增這一句,q用於以後的動態分配
- cin>>ch;
- }
- q->next=NULL;
- }
- template < class T>
- void list< T>::print(T *p)
- {
- if(p)
- {
- cout< < p->data< < " ";
- print(p->next);
- }
- }
- template < class T>
- void list< T>::destroy(T *p)
- {
- if(p)
- {
- destroy(p->next);
- delete p->next;
- }
- }
- int main()
- {
- // NODEPTR p;
- node< int> p;
- // list L; 模版要有參數
- list< node< int> > L;
- L.creat(&p);
- cout < < endl < < endl < < "show:" < < endl;
- L.print(&p);
- L.destroy(&p);
- return 0;
- }
實現C++單向鏈表時,程序使用了指針,如果改用引用更好些。