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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

2021-9-下旬 数据结构-线性表-动态数组-java代码实现

發(fā)布時間:2025/3/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2021-9-下旬 数据结构-线性表-动态数组-java代码实现 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

信管的數(shù)據(jù)結(jié)構(gòu)講的太水了,遂重學(xué)(看的網(wǎng)課:戀上數(shù)據(jù)結(jié)構(gòu)與算法,講的very good),為算法學(xué)習(xí)打基礎(chǔ)(都大三了還在打基礎(chǔ)),順便在leetcode上跟進(jìn)一些相關(guān)的題,記錄在這里,這里最方便復(fù)習(xí)
另一方面發(fā)現(xiàn)未來的考試題,除了算法題之外,比較基礎(chǔ)的題(對基本數(shù)據(jù)結(jié)構(gòu)的各種操作),也占了可觀的一部分
最后,順便新入門了java語言,相比C++,java在寫算法和數(shù)據(jù)結(jié)構(gòu)這方面還是方便太多了,比如自動回收機(jī)制,但是另一方面java對基礎(chǔ)數(shù)據(jù)類型是值傳遞,而對其他數(shù)據(jù)類型就都是地址傳遞,而且指針在代碼里體現(xiàn)的也很不明顯,反倒讓我容易混淆,但是熟悉了之后發(fā)現(xiàn)對于一點沒學(xué)過指針的人,java真是太友好了(于是很快就把C里關(guān)于指針的操作忘光了,而且后面發(fā)現(xiàn)考試填代碼塊都是用C,于是又換回C++實現(xiàn)了)

public class ArrayListIntZH {//index指數(shù)組的元素下標(biāo),而不是第幾個元素(麻煩+1)//size指數(shù)組當(dāng)前元素個數(shù)private int[] elements;private int size;//定義全局變量(不在函數(shù)里的)不初始化默認(rèn)初始值為0,局部變量則初始值隨機(jī)private static final int DEFAULT_CAPACITY = 10;private static final int ELEMENT_NOT_FOUND = -1;//自定義數(shù)組(線性表)長度構(gòu)造函數(shù)public ArrayListIntZH(int capacity){if (capacity<10){capacity = 10;}//new是向堆空間申請內(nèi)存,返回的是內(nèi)存地址elements = new int[capacity];}//函數(shù)重載,非自定義數(shù)組長度則默認(rèn)長度為10public ArrayListIntZH(){elements = new int[DEFAULT_CAPACITY];}//返回數(shù)組當(dāng)前元素個數(shù)public int size(){return size;}//清空線性表//理解這個清空為什么是size=0很關(guān)鍵,雖然內(nèi)在數(shù)據(jù)沒被刪,但是我們也訪問不了了,直接在原有數(shù)組上覆蓋改寫public void clear(){size = 0;}//添加元素到線性表末端,這里直接調(diào)用后面一個更高級的addpublic void add(int element){add(size,element);}//這里是擴(kuò)容函數(shù),實現(xiàn)了插入時動態(tài)數(shù)組可以自動擴(kuò)容private void ifNeedEnLarge(int needCapacity){int oldcapacity = elements.length;if (needCapacity<=oldcapacity){return;}else{int newcapacity = oldcapacity*2;//默認(rèn)擴(kuò)容后的容量是舊容量的2倍int[] newElements = new int[newcapacity];for (int i=0;i<size;i++){newElements[i]=elements[i];}elements = newElements;System.out.println("enLarge Success"+" newCapacity = "+newcapacity);}}//在固定位置添加元素,若超出size則擴(kuò)容public void add(int index, int element){if(index<0||index>size){throw new IndexOutOfBoundsException("Index="+index+"but,size="+size);}ifNeedEnLarge(size+1);for (int i = size-1;i>=index;i--){elements[i+1]=elements[i];}elements[index]=element;size++;}//移除固定位置元素//被刪元素后面依次向前覆蓋,最后一個元素覆蓋到倒數(shù)第二個元素,直接size就行,不用單獨釋放最后一個元素public void remove(int index){if(index<0||index>size-1){throw new IndexOutOfBoundsException("Index="+index+"but,size="+size);}//當(dāng)給出的index不在合理范圍內(nèi)時,拋出一個錯誤提示,很嚴(yán)謹(jǐn),參數(shù)是index的都要有這步//注意for循環(huán)的判斷條件,當(dāng)i<n成為判斷條件時,i到n就不會執(zhí)行下面了,下面執(zhí)行的最多只到n-1//比如下面我們想讓size-1的覆蓋size-2的,那么就要讓i最大執(zhí)行時等于size-1,即i小于sizefor (int i = index + 1; i<size;i++ ){elements[i-1]=elements[i];}size--;//注意不要總把循環(huán)結(jié)束后的語句寫到循環(huán)里面去啊啊啊啊}//返回是否線性表為空public boolean isEmpty(){return size==0;}//返回線性表是否包含某特定元素public boolean contains(int element){for (int i=0;i<size-1;i++){if (elements[i] == element){return true;}}return false;}// 返回線性表的固定位置元素public int get(int index){if(index<0||index>size-1){throw new IndexOutOfBoundsException("Index="+index+"but,size="+size);}//當(dāng)給出的index不在合理范圍內(nèi)時,拋出一個錯誤提示,很嚴(yán)謹(jǐn),參數(shù)是index的都要有這步return elements[index];}//改變線性表的固定位置元素public void set(int index,int element){if(index<0||index>size-1){throw new IndexOutOfBoundsException("Index="+index+"but,size="+size);}//當(dāng)給出的index不在合理范圍內(nèi)時,拋出一個錯誤提示,很嚴(yán)謹(jǐn),參數(shù)是index的都要有這步elements[index] = element;}//返回線性表特定元素的位置public int indexOf(int element){for (int i = 0; i<size-1;i++){if (elements[i]==element){return i;}}return ELEMENT_NOT_FOUND;}//自定義打印數(shù)組,返回是string類型,這里StringBuilderpublic String arrayPrint(){//這里用了stringBuilder類,一看就明白應(yīng)該//打印樣例:size=10 [1,2,3,4,5,6,7,8,9,10]StringBuilder string = new StringBuilder();string.append("size = ").append(size).append(" ").append("[");for (int i = 0; i<size-1; i++ ){if (i!=size-1) {string.append(elements[i]).append(",");}}string.append(elements[size-1]).append("]");return string.toString();//這里是因為在這里面string是stringbuilder類的對象,不是string類的,不能作為返回值,所以事先轉(zhuǎn)換一下}}

總結(jié)

以上是生活随笔為你收集整理的2021-9-下旬 数据结构-线性表-动态数组-java代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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