您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)java實(shí)現(xiàn)順序表增刪查改的方法的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
什么是順序表?它是一種什么結(jié)構(gòu)?
順序表是用一段物理地址連續(xù)的存儲(chǔ)單元依次存儲(chǔ)的線性結(jié)構(gòu),一般情況下采用數(shù)組存儲(chǔ)。在數(shù)組上完成數(shù)據(jù)的增刪查改。
順序表分為:
靜態(tài)順序表:使用定長(zhǎng)數(shù)組存儲(chǔ)
動(dòng)態(tài)順序表:使用動(dòng)態(tài)開辟的數(shù)組存儲(chǔ)
靜態(tài)順序表適用于確定知道需要存多少數(shù)據(jù)的場(chǎng)景。
靜態(tài)順序表的定長(zhǎng)數(shù)組導(dǎo)致N定大了,空間開多了浪費(fèi),開少了不夠用。
順序表實(shí)現(xiàn)
首先得給定一個(gè)順序表的長(zhǎng)度,假如你要給列表插入元素,我們得先給0號(hào)位置插第一個(gè)數(shù),如果0號(hào)位置沒(méi)有數(shù),我們不能直接插在1號(hào)位置或是更后邊。如果0,1,2號(hào)位置都有數(shù)據(jù),我們要往0號(hào)或1號(hào)位置插的話,這個(gè)時(shí)候得倒著遍歷順序表,讓前邊的數(shù)據(jù)往后挪一步。
增:
public class SepList { public int[] val;//定義數(shù)據(jù) public int size;//存放一個(gè)數(shù)據(jù)則讓size++; //構(gòu)造方法 順序表大小 public SepList(){ this.val = new int[5]; } //也可以往進(jìn)傳大小 public SepList(int ret){ this.val = new int[ret]; } //增加數(shù)據(jù) 得傳要插入的位置與對(duì)應(yīng)位置的數(shù)據(jù) 就比如0號(hào)位置插10 public void addVal(int pos,int val){ //首先判斷順序表是否滿 if(this.val.length == this.size) return; //其次得看看給的位置是否合法 pos不能小于0 也不能比如0號(hào)位置有數(shù)據(jù) 1號(hào)位置沒(méi)有數(shù)據(jù) 然后插在2號(hào)或者更后邊的位置 if(pos < 0 || pos > this.size) return; //如果0 1 2 3位置都有數(shù)據(jù),要往1號(hào)位置插,得讓后邊的位置往后移一步 for(int i = this.size; i >= pos; i--){ this.val[i + 1] = this.val[i]; } //此時(shí)在給定位置插數(shù)據(jù) this.val[pos] = val; this.size++; } //打印鏈表 public void disPlay(){ for(int i = 0; i < this.size; i++){ System.out.print(this.val[i] + " "); } System.out.println();//打印完后空行 } public static void main(String[] args) { SepList myList = new SepList();//默認(rèn)用5個(gè)元素 // SepList myList = new SepList(10);//這時(shí)候順序表的大小是10 myList.addVal(0,10);//在0位置插入第一個(gè)數(shù)據(jù) myList.disPlay();//打印 } } //執(zhí)行結(jié)果 10
如果要插入多個(gè)數(shù)據(jù)則調(diào)用方法即可
比如:
myList.addVal(0,10);//第一次插入 myList.addVal(1,20); myList.addVal(2,30); myList.addVal(3,40); myList.addVal(4,50); myList.disPlay();//打印 //執(zhí)行結(jié)果 10 20 30 40 50
此時(shí)順序表已滿 如果再往進(jìn)插入呢
myList.addVal(0,10);//第一次插入 myList.addVal(1,20); myList.addVal(2,30); myList.addVal(3,40); myList.addVal(4,50); myList.addVal(5,60); myList.addVal(6,70); myList.disPlay();//打印 //執(zhí)行結(jié)果 10 20 30 40 50
為啥還是原來(lái)的,也沒(méi)有報(bào)錯(cuò)。是因?yàn)檫M(jìn)入add函數(shù)在判斷順序表為滿時(shí),如果滿了,直接跳出到打印函數(shù)。并不會(huì)報(bào)錯(cuò)。此時(shí)增函數(shù)就寫好了。
查
//判定鏈表是否包含某個(gè)元素 public boolean contains(int toFind){ for(int i = 0; i < this.size; i++){ if(toFind == this.val[i]){ return true; } } return false; } //查找某個(gè)元素對(duì)應(yīng)的位置 public int search(int toFind){ for(int i = 0; i < this.size; i++){ if(toFind == this.val[i]){ return i; } } return -1; } //獲取pos位置的數(shù)據(jù) public int getPos(int pos){ //首先判斷pos是否合法 if(pos < 0 || pos > this.size) return -1; for(int i = 0; i < this.size; i++){ if(this.val[i] == this.val[pos]){ return this.val[pos]; } } return -1; } //調(diào)用方法 在這沒(méi)有粘貼主函數(shù) 你們一定要加上 boolean flag1 = myList.contains(10);//判定元素 boolean flag2 = myList.contains(60); System.out.println(flag1); System.out.println(flag2); int ret = myList.search(10);//查找 int ret1 = myList.search(50); System.out.println(ret); System.out.println(ret1); int ret2 = myList.getPos(0);//獲取pos位置數(shù)據(jù) int ret3 = myList.getPos(4); System.out.println(ret2); System.out.println(ret3); //執(zhí)行結(jié)果 true false 0 4 10 50
改
直接找到pos位置對(duì)應(yīng)的數(shù)據(jù),將新數(shù)據(jù)賦給它就好了
//修改pos位置的值 public void remove(int pos,int val){ if(pos < 0 || pos > this.size){ return; } else { this.val[pos] = val; } } myList.remove(2,3);//2號(hào)位置改為3 myList.remove(3,4);//3號(hào)位置改為4 myList.disPlay();//打印 //執(zhí)行結(jié)果 10 20 3 4 50
刪
刪除指定的數(shù)據(jù)后,后邊的數(shù)據(jù)往前覆蓋就可以了
//刪除元素 public void delVal(int key){ int i,j = 0; //找到該位置 for(i = 0; i < this.size; i++){ if(this.val[i] == key){ j = i; break; } } //刪除該位置數(shù)據(jù),后邊數(shù)據(jù)往前覆蓋 for(i = j; i < this.size - 1; i++){ this.val[i] = this.val[i + 1]; } this.size--; } myList.delVal(10); myList.delVal(50); myList.disPlay();//打印 //執(zhí)行結(jié)果 20 30 40
感謝各位的閱讀!關(guān)于“java實(shí)現(xiàn)順序表增刪查改的方法”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。