日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

双链表的操作

發(fā)布時間:2025/3/21 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 双链表的操作 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

雙鏈表的代碼定義

#include <iostream> using namespace std;typedef struct _DLNode {int data; //結(jié)點數(shù)據(jù)域struct _DLNode *next; //指向后繼的指針struct _DLNode *prev; //指向前驅(qū)的指針}DbLinkNode,DbLinkList;

雙鏈表的操作

初始化雙鏈表

//初始化雙鏈表 bool initDbLinkList(DbLinkList* &L) {L = new DbLinkNode;//合法性檢查,檢查內(nèi)存是否分配成功if(!L) return false;L->next = NULL;L->prev = NULL;L->data = -1;return true; }

插入

前插法

//前插法 bool DbListInsertFront(DbLinkList* &L, DbLinkNode *node) {//合法性檢查if(!L || !node) return false;// if(L->next == NULL) // { // //若只有頭結(jié)點,則在頭結(jié)點后面插入一個結(jié)點 // node->next = NULL; // node->prev = L; // L->next = node; // } // else // { // //若有多個結(jié)點,則在頭結(jié)點與其后結(jié)點之間插入 // L->next->prev = node; //令第二結(jié)點指向前驅(qū)的指針指向node // node->next = L->next; // node->prev = L; // L->next = node; // }//優(yōu)化if(L->next) L->next->prev = node;node->next = L->next;node->prev = L;L->next = node;return true; }

尾插法

//尾插法 bool DbListInsertBack(DbLinkList* &L, DbLinkNode *node) {//合法性檢查if(!L || !node) return false;DbLinkNode *p = L;//找到尾結(jié)點while(p->next){p = p->next;}node->next = NULL;node->prev = p;p->next = node;return true; }

任意位置插入

//任意位置插入 /* 參數(shù): 插入的雙向鏈表, 插入位置, 插入結(jié)點數(shù)據(jù)域的值*/ bool DbListInsert(DbLinkList* &L, int i, int &e) {//若鏈表為空未初始化,返回falseif(!L) return false;//若只有頭結(jié)點,但插入位置不等于1,則返回falseif((!L->next && i != 1) || i < 1) return false;int j = 0;DbLinkList *p = L, *s;while(p && j < i){//找查位置為i的結(jié)點p = p->next;j++;}if(!p || j != i){cout << "不存在結(jié)點" << i << endl;return false;}cout << "p: " << p << endl;s = new DbLinkNode; //生成新的結(jié)點s->data = e;s->next = p;s->prev = p->prev;p->prev->next = s;p->prev = s;return true; }

雙鏈表的遍歷輸出

//雙向鏈表的遍歷輸出 void printDbList(DbLinkList *L) {//檢查鏈表是否為空if(!L){cout << "鏈表為空" << endl;return;}DbLinkList *p = L;p = p->next;while(p){cout << p->data << endl;p = p->next;}}

元素刪除與雙鏈表的銷毀

本部分操作與單鏈表一致,請參考《單鏈表的操作》

總結(jié)

以上是生活随笔為你收集整理的双链表的操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。