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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

双链集合添加删除算法

發(fā)布時間:2023/12/31 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 双链集合添加删除算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

2019獨角獸企業(yè)重金招聘Python工程師標準>>>

雙鏈集合添加刪除算法:

package com.linkes;public class MyLinkeList { /*** 更多資料歡迎瀏覽凱哥學堂官網:http://kaige123.com* @author 小沫*//*** 鏈表集合他是于雙鏈條式進行引用上下家,好處可以知道上家和下家是誰* 利于修改,可以從首部開始刪除數(shù)據(jù)也可以從尾部刪除。* 即可從中間指定位置刪除。*/private Object[] shou;private Object[] wei;// 默認添加方法public void add(Object obj) {if (shou == null) {//首部為空就new好空間第1個和第三個放null第二個放傳遞進來的數(shù)據(jù)shou = new Object[] { null, obj, null };wei = shou;//把尾部指向了首部} else {//如果首部有數(shù)據(jù),那么就new好長度為3的空間//把wei放入第一個指向了上家,第二個放入當前的數(shù)據(jù),第三個為NULLObject[] objs = new Object[] { wei, obj, null };wei[2] = objs;//尾部的第三個指向了objswei = objs;//objs更新成尾部}}// 從最后面添加方法public void addlast(Object obj) {add(obj);}// 從最前面添加方法public void addFirst(Object obj) {if (shou == null) {shou = new Object[] { null, obj, null };wei = shou;} else {Object[] objs = new Object[] { null, obj, shou };shou[0] = objs;shou = objs;}}// 全部刪除方法public void removeAll(int delAll) {if (delAll == 0) {wei = null;//直接制個空就全部刪除了shou = null;System.out.println("清除完成");} else {try {throw new Exception("刪除失敗!delAll需為'0'");} catch (Exception e) {e.printStackTrace();}}}// 從最后面刪除方法public Object removeLast() {Object obj = null;if (wei == null) {//沒有尾部那么直接返回falsereturn false;}//請問有沒有上家if (wei[0] == null) {//如果沒有直接把尾跟首制空 因為沒有上家意味著只有一個數(shù)據(jù)wei = null;shou = null;} else {//有上家那就把尾部1里面的數(shù)據(jù)交給objobj = wei[1];wei = (Object[]) wei[0];//尾部指向了尾部的下標0wei[2] = null;}return obj;}// 從最前面刪除方法public Object removeFirst() {Object obj = null;obj = shou[1];if (shou == null) {return false;}if (shou[2] == null) {wei = null;shou = null;} else {shou = (Object[]) shou[2];shou[0] = null;}return obj;}// 從中間刪除方法public boolean remove(Object obj) {Object[] objs = shou;while (true) {//找上下家//傳進來的數(shù)據(jù)是不是等于了objs當前的數(shù)據(jù)if (obj.equals(objs[1])) {break;//如果等于了那就是找到了跳出循環(huán)}//如果傳進來的數(shù)據(jù)不是當前數(shù)據(jù)那么就列出下家objs = (Object[]) objs[2];if (objs == null) {//如果沒有下家了那么就跳出循環(huán)break;}}if (objs == null) {return false;}if (objs == shou) {//問是不是刪除首部removeFirst();} else if (objs == wei) {//是不是刪除尾部removeLast();} else {//把當前數(shù)據(jù)拆分成上家和下家Object[] shang = (Object[]) objs[0];Object[] xia = (Object[]) objs[2];shang[2] = xia;//把上家的下標2引用了下家數(shù)據(jù)xia[0] = shang;//把下家的下標0引用了上家數(shù)據(jù)}return true;}private Object[] dq = null;//用hashNext一個個詢問數(shù)據(jù)檢索public boolean hashNext() {if (dq == null) {dq = shou;if (dq == null) {return false;}return true;}dq = (Object[]) dq[2];if (dq == null) {return false;}return true;}//用Next進行拿到值public Object Next() {return dq[1];} }

測試類:

ackage com.linkes;public class Test {public static void main(String[] args) {MyLinkeList linke = new MyLinkeList();linke.add("a");linke.addlast("b");linke.addFirst("c");linke.addFirst("d");linke.addFirst("e");linke.addFirst("f");linke.addFirst("g");linke.removeAll(1);while(linke.hashNext()){System.out.println(linke.Next());}}}

轉載于:https://my.oschina.net/kaige123/blog/1383036

總結

以上是生活随笔為你收集整理的双链集合添加删除算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。