node類標頭檔案
#ifndef node_h_
#define node_h_
#include #include using namespace std;
class node
;#endif
node類cpp
#include "node.h"
using namespace std;
//過載《運算子
ostream& operator<<(ostream& os, const node& _node)
node::node(string _name): name(_name),next(null){};
linklist類標頭檔案
#ifndef linklist_h_
#define linklist_h_
#include "node.h"
using namespace std;
class linklist
; void addtohead(const string&);
void addtotail(const string&);
void showlist();
bool isempty();
void insert(const string&);
int thesize();
void deletenode(const string&);
void recursiveprintlist();//遞迴列印,無需傳入要節點,公有
~linklist();
private:
node *head;//head是乙個指向乙個node類的指標
int size;
node* findtail();//找到尾巴節點,私有函式
void recursiveprintlist(node*);//遞迴列印,需要傳入節點,私有,不對使用者暴露 };
#endif
linklist類cpp
#include "linklist.h"
using namespace std;
/* ---------------把新的節點加到鍊錶的頭部------------------------*/
void linklist::addtohead(const string& name)
//如果鍊錶不是空的,head指標已經指向了某個node。
//我們讓新建的這個node的next指標指向head指標所指向的那個節點;
//然後讓head指標指向這個新建的node
else
size++;
}/* ---------------找到指向最後乙個node的那個指標-----------------*/
node* linklist::findtail()
return ptail;
}bool linklist::isempty()
/* ---------------把新的節點加到鍊錶的尾部------------------------*/
void linklist::addtotail(const string& name)
else
size++;
}/* ---------------構造乙個優先佇列的鍊錶------------------------*/
void linklist::insert(const string& name)
//如果鍊錶非空
//定義兩個指標,乙個current指標,指向現在的節點
//乙個previous指標,指向之前乙個的節點
else
else
}//如果要插入的位置是head;
if (curr == head)
//如果要插入的位置是中間某處或者鍊錶尾巴(不是head)
else
} size++;
}int linklist::thesize()
void linklist::deletenode(const string& name)
else
}if (curr == null)
else
delete curr;
size--; }}
void linklist::showlist()
}void linklist::recursiveprintlist()
void linklist::recursiveprintlist(node* pnode)
}
#include "linklist.h"
using namespace std;
int main()
// lk->showlist();
// // cout << "-------------------" << endl;
// ///*------------以下**用來從尾部插入節點-------------*/
// while (1)
//
// lk->showlist();
// // cout << "-------------------" << endl;
/*------------以下**用來插入節點,構造優先佇列-------------*/
while (1)
lk->showlist();
cout << "-------------------" << endl;
/*------------以下**用來delete某個節點-------------*/
while (1)
lk->showlist();
cout << "-------------------" << endl;
/*------------recursively列印出鍊錶的元素-------------*/
lk->recursiveprintlist();
cout << "-------------------" << endl;
cout << "the size of this linklist is: " << lk->thesize() << endl;
/*-------------需要手動釋放 lk指標,否則析構函式不會自動執行
(因為lk是乙個指向物件的指標,而不是物件)-------------------*/
delete lk;
return 0;
}
單鏈表的C 實現
include using namespace std struct node class list void insertlist int adata,int bdata void deletelist int adata void outputlist node gethead void lis...
C 單鏈表的實現
include include include include using namespace std typedef struct student node node create 建立單鏈表 else cycle 0 head head next p next null coutreturn h...
單鏈表的實現(C )
個人風格,我覺得最應該把總結放到最前面寫,因為查閱相關部落格的人都是了解了一些背景知識的,他們可能需要的就是關鍵的點睛之筆。typedef struct node linknode,linklist linknode 代表的是乙個node,而 linklist 代表的則是指向這個 node 的指標,...