C++數(shù)據(jù)結(jié)構(gòu)之雙向鏈表
更新時(shí)間:2022年05月26日 16:36:48 作者:W...Z
這篇文章主要為大家詳細(xì)介紹了C++數(shù)據(jù)結(jié)構(gòu)之雙向鏈表,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了C++數(shù)據(jù)結(jié)構(gòu)之雙向鏈表的具體代碼,供大家參考,具體內(nèi)容如下
#include <iostream> using std::cout; using std::endl; struct Node { ?? ?int data; ?? ?struct Node * next; ?? ?struct Node * pre; };
一、創(chuàng)建雙向鏈表
Node * createList() { ?? ?Node * head = new Node; ?? ?if (NULL == head) ?? ??? ?exit(-1); ?? ?head->next = head; ?? ?head->pre = head; ?? ?return head; }
二、插入元素(頭插法)
讓新來的節(jié)點(diǎn)先有所指
void insertList(Node * head,int n) { ?? ?Node * cur = new Node; ?? ?if (NULL == cur) ?? ??? ?exit(-1); ?? ?cur->next = head->next; ?? ?cur->pre = head; ?? ?head->next = cur; ?? ?cur->next->pre = cur; ?? ? ?? ?cur->data = n; }
三、鏈表長度
int lenList(Node * head) { ?? ?int i = 0; ?? ?Node * t = head->next; ?? ?while (t != head) ?? ?{ ?? ??? ?i++; ?? ??? ?t = t->next; ?? ?} ?? ?return i; }
四、查找遍歷
Node * findList(Node * head,int fn) { ?? ?Node * forward = head->next; ?? ?Node * back = head->pre; ?? ?while (forward != back->next) ?? ?{ ?? ??? ?if (forward->data == fn) ?? ??? ??? ?return forward; ?? ??? ?if (back->data == fn) ?? ??? ??? ?return back; ?? ??? ?if (forward == back) ?? ??? ??? ?break; ?? ??? ?forward = forward->next; ?? ??? ?back = back->pre; ?? ?} ?? ?return NULL; }
五、刪除其中元素
void deleteList(Node * pFind) { ?? ?pFind->pre->next = pFind->next; ?? ?pFind->next->pre = pFind->pre; ?? ?delete pFind; }
六、排序
(類似于先刪除 再插入)
void sortDlist(Node * head) { ?? ?int len = lenList(head); ?? ?Node *prep = NULL; ?? ?Node *p = NULL; ?? ?Node *q = NULL; ?? ?Node *t = NULL; ?? ?for (int i = 0;i < len - 1;i++) ?? ?{ ?? ??? ?p = head->next; ?? ??? ?q = p->next; ?? ??? ?for (int j = 0;j < len - 1 - i;j++) ?? ??? ?{ ?? ??? ??? ?if ((p->data)<(q->data)) ?? ??? ??? ?{ ?? ??? ??? ??? ?p->pre->next = q; ?? ??? ??? ??? ?q->pre = p->pre; ?? ??? ??? ??? ?p->next = q->next; ?? ??? ??? ??? ?p->pre = q; ?? ??? ??? ??? ?q->next = p; ?? ??? ??? ??? ?p->next->pre = p; ?? ??? ??? ??? ?t = p; ?? ??? ??? ??? ?p = q; ?? ??? ??? ??? ?q = t; ?? ??? ??? ?} ?? ??? ??? ?p = p->next; ?? ??? ??? ?q = q->next; ?? ??? ?} ?? ?} }
七、銷毀鏈表
void desList(Node * head) { ?? ?head->pre->next = NULL; ?? ?Node *t = NULL; ?? ?while (head != NULL) ?? ?{ ?? ??? ?t = head; ?? ??? ?head = head->next; ?? ??? ?delete t; ?? ?} }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
通過C語言判斷字符串是否為點(diǎn)分十進(jìn)制的IP地址
這篇文章主要為大家詳細(xì)介紹了如何通過C語言判斷字符串是否為點(diǎn)分十進(jìn)制的IP地址,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-03-03C/C++讀取大文件數(shù)據(jù)方式詳細(xì)講解
這篇文章主要介紹了C語言/C++讀取大文件數(shù)據(jù)的完整方式過程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-09-09C++實(shí)現(xiàn)將數(shù)據(jù)寫入Excel工作表的示例代碼
直觀的界面、出色的計(jì)算功能和圖表工具,使Excel成為最流行的個(gè)人計(jì)算機(jī)數(shù)據(jù)處理軟件。在本文中,您將學(xué)習(xí)如何使用?Spire.XLS?for?C++?創(chuàng)建?Excel?文檔,以及如何將數(shù)據(jù)寫入?Excel?工作表2023-03-03