單鏈表的c 實現

2021-06-26 07:51:08 字數 3361 閱讀 1187

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 的指標,...