雙向鏈表


主要有鏈表跟節(jié)點(diǎn)2個(gè)結(jié)構(gòu)體
type?Dnode?struct?{ ???data?interface{} ???prev?*Dnode ???next?*Dnode } type??DList?struct?{ ???head?*Dnode ???tail?*Dnode ???size?int }特點(diǎn):
1、除頭部、尾部2個(gè)節(jié)點(diǎn)外,其他任意節(jié)點(diǎn)都通過(guò)prev / next 分別指向前置后置節(jié)點(diǎn)

2、頭部節(jié)點(diǎn)前置節(jié)點(diǎn)為空,同理尾部節(jié)點(diǎn)后置節(jié)點(diǎn)為空
主要實(shí)現(xiàn)的API如下:
1、查詢
查詢鏈表長(zhǎng)度
查詢?nèi)我夤?jié)點(diǎn)
2、添加
從開頭插入節(jié)點(diǎn)
從尾部插入節(jié)點(diǎn)
從任意位置插入節(jié)點(diǎn)
3、刪除
刪除任意節(jié)點(diǎn)
4、其他
打印鏈表
初始化鏈表
具體實(shí)現(xiàn)如下:
package?main import?"fmt" type?Dnode?struct?{ ???data?interface{} ???prev?*Dnode ???next?*Dnode } type??DList?struct?{ ???head?*Dnode ???tail?*Dnode ???size?int } //?獲取鏈表長(zhǎng)度 func?(dl?*DList)getSize()int{ ???return?dl.size } //?獲取鏈表頭部 func?(dl?*DList)getHead()?*Dnode{ ???return?dl.head } //?獲取鏈表尾部 func?(dl?*DList)getTail()?*Dnode{ ???return?dl.tail } //?初始化鏈表 func?initDList()(dl?*DList){ ???return?&DList{ ??????head:nil, ??????tail:nil, ??????size:0, ???} } //?打印鏈表 func?(dl?*DList)?display(){ ???fmt.Println("DoubleLinkedList?size?is?",dl.size) ???if?dl.getSize()?==?0{ ??????return ???} ???ptr?:=?dl.head ???for?ptr?!=?nil{ ??????fmt.Println("data?is?",ptr.data) ??????ptr?=?ptr.next ???} } //?在頭部追加節(jié)點(diǎn) func?(dl?*DList)?addHeadNode(node?*Dnode){ ???if?dl.getSize()?==?0{ ??????dl.head?=?node ??????dl.tail?=?node ??????node.prev?=?nil ??????node.next?=?nil ???}else{ ??????dl.head.prev?=?node ??????node.prev?=?nil ??????node.next?=?dl.head ??????dl.head?=?node ???} ???dl.size?+=?1 } //?在尾部追加節(jié)點(diǎn) func?(dl?*DList)?append(node?*Dnode){ ???if?dl.getSize()?==?0?{ ??????dl.head?=?node ??????dl.tail?=?node ??????node.prev?=?nil ??????node.next?=?nil ???}else{ ??????dl.tail.next?=?node ??????node.prev?=?dl.tail ??????node.next?=?nil ??????dl.tail?=?node ???} ???dl.size?+=?1 } //?增加任意節(jié)點(diǎn) func?(dl?*DList)?insert(node?*Dnode,index?int){ ???if?dl.getSize()?==?0?{ ??????dl.addHeadNode(node) ???} ???//?獲取當(dāng)前索引為index?值的節(jié)點(diǎn) ???oldNode?:=?dl.getNode(index) ???node.next?=?oldNode ???node.prev?=?oldNode.prev ???oldNode.prev.next?=?node ???oldNode.prev?=?node ??? ???dl.size?++ } //?查詢節(jié)點(diǎn) func?(dl?*DList)?getNode(index?int)(dnode?*Dnode){ ???if?dl.getSize()?==?0?||?index?>?dl.getSize()?{ ??????return?nil ???} ???if?index?==?0{ ??????return?dl.head ???} ???node?:=?dl.head ???for?i:=0;i<=index;i++{ ??????dnode?=?node.next ???} ???return } //?任意節(jié)點(diǎn)刪除 func?(dl?*DList)?remove(node?*Dnode)?{ ???//?默認(rèn)刪除尾部節(jié)點(diǎn) ???if?node?==?nil?||?node?==?dl.tail{ ??????node?=?dl.tail ??????dl.tail?=?node.prev ??????dl.tail.next?=?nil ???}else?if?node?==?dl.head{ ??????dl.head?=?node.next ??????dl.head.prev?=?nil ???}else{ ??????node.prev.next?=?node.next ??????node.next.prev?=?node.prev ???} ???dl.size?-- } func?main()?{ ???dl?:=?initDList() ???fmt.Println("從開頭添加節(jié)點(diǎn)") ???for?i:=0;i<5;i++{ ??????dnode?:=?Dnode{ ?????????data:i, ??????} ??????dl.addHeadNode(&dnode) ???} ???dl.display() ???fmt.Println("從末尾添加節(jié)點(diǎn)") ???for?i:=5;i<10;i++{ ??????dnode?:=?Dnode{ ?????????data:i, ??????} ??????dl.append(&dnode) ???} ???dl.display() ???fmt.Println("刪除最后一個(gè)節(jié)點(diǎn)") ???dl.remove(nil) ???dl.display() ???fmt.Println("刪除第3個(gè)節(jié)點(diǎn)") ???node?:=?dl.getNode(3) ???dl.remove(node) ???dl.display() ???fmt.Println("添加第2個(gè)節(jié)點(diǎn)") ???node?=?&Dnode{ ??????data:3, ???} ???dl.insert(node,1) ???dl.display() }另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
新聞標(biāo)題:自己動(dòng)手用golang實(shí)現(xiàn)雙向鏈表-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://www.chinadenli.net/article46/dcdeeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、定制網(wǎng)站、動(dòng)態(tài)網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)公司、服務(wù)器托管、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容