java版數據結構與演算法
其實有兩種方式:
第一種就是遞歸 就像現在比較老的樹形菜單。這種方式應該string類型應該是存不了的。就是自定義一個類型A 裡面有一個成員變數 list<A>。 這種結構就是list裡面嵌套list,你有多少級就有多少層。
第二種其實要做處理,就是把原數據按一定規則排序放到一個list裡面,這裡面不會再嵌套list。list排完序就如你的效果圖一樣。第一個 一級節點 》》其子節點;然後第二個一級節點》》其子節點,etc。 但是這種結構要有存的時候要循環一遍排成上述的順序,取的時候還需要判斷哪個是下一個不同級節點的開始。
js前台展示比較簡單,根據父id直接添加就行了,原數據什麼都不用做。但是java里這種方式不行。
⑵ java數據結構和演算法
首先看存儲方式, 這個list, 只保存一個link的引用, 作為鏈表的頭, 然後通過這個頭.next, 得到第二個, 第二個.next得到第三個, 一次類推, 知道.next == null 的時候, 說明list結束.
那麼現在分兩種情況看:
1. 當當前鏈表裡面沒有元素的時候, 那麼就添加一個, 然後讓它的next = first, 也就是為null, 那麼鏈表在遍歷的時候, 訪問了第一個, 然後第一個.next == null, 鏈表就到頭了.
2.當當前鏈表裡面有元素的時候, 那麼因為方法叫做firstinsert, 也就是添加頭元素, 所以先聲明一個link = newlink, 然後讓newlink, 的next 指向之前list.first素, 那麼現在newlink就變成了第一個, 而之前那個變成了第二個, 然後再把newlink的引用賦給first, 這樣, 鏈表的頭就變成了newlink, 達到了first insert的目的.
first的引用就是我上面分析的兩種情況, 一種是沒有元素就是null, 另一種情況是有, 變成了第二個, 因為這個list要有結束的位置, 否則就無限長了, 結束的條件就是遍歷list的時候, 最後一個元素.next == null, 這樣list就停住了我大體畫個圖吧, 你看看:
第一種情況: 當隊列中沒有元素的時候
列表中什麼都沒有 : [ (head)null ]
有一個newlink {nl}
執行完newlink.next=first; {nl} -> null
執行完first=newlink; [ (head){nl} -> null ];
這樣list的頭就是newlist, 只有它一個元素.
第二中情況: 當隊列中有元素的時候:
假設當前頭元素為{oldhead}
[ (head){oldhead} -> {obj1} -> {obj2} ... {objn} -> null]
有一個newlink {nl}
執行完newlink.next=first; {nl} -> {oldhead}
執行完first=newlink; [ (head){nl} -> {oldhead} -> {obj1} -> {obj2} ... {objn} -> null]
這樣list的頭就是newlist, 而oldhead就變成了第二個元素, 後面的元素以此類推.
⑶ 誰會java數據結構與演算法啊
還是讓我來回答你的問題。
其實java和數據結構以及演算法是不同的東西。
只能說使用java實現相應的數據結構和演算法。
數據結構和演算法是屬於計算機范疇,獨立於編程語言的知識領域。
除了你說的這兩個領域之外還有一個叫做設計模式,你知道嗎?
因此,你這樣說是不太對的,這不算是一個技能了。
於是java你需要單獨學,數據結構需要單獨學,演算法需要單獨學。
下邊推薦幾本書:
java---thinking in java
數據結構--大話數據結構
演算法---演算法導論,
設計模式--大話設計模式
⑷ java 數據結構與演算法
這個題目我i以前解答過,再CSDN有答案
⑸ 數據結構與演算法分析,c,c++,java版之間的區別是什麼
演算法思想都是一樣的。但不同語言之間,實現會有所不同。
演算法只是一種軟體的設計思路,可以指導代碼的編寫,並完成一定的功能。但演算法本身並不能實現功能,必須有具體的編程語言去實現。於是介紹演算法的書籍,根據書中實現演算法的語言不通,就有了C, C++, Java等的區別。
具體語言並不影響演算法的理解,在選擇書籍的時候,選取自身熟悉並掌握的語言即可。
在不了解任何編程語言的情況下,最好不要先接觸演算法。因為不配合具體的實現,空談演算法無法深入理解,同時也是沒有意義的。
⑹ JAVA數據結構與演算法
給你寫了答案如下,有問題再追問。
B
A
C
確切性
3
infexOf
隊頭指針指向隊尾
對
對
順序表:查找方便,但插入困難;
鏈表:查找困難,但插入方便。
//最大值
publicstaticintgetMax(intn,int[]arr){//n是數組最後一個元素的index
if(n==0)
returnarr[0];
if(arr[n]>getMax(n-1,arr))
returnarr[n];
returngetMax(n-1,arr);
}//平均值
publicstaticintgetAverage(intn,int[]arr){//n是數組最後一個元素的index
if(n==1)
returnarr[0];
return(arr[n]+getAverage(n-1,arr)*(n-1))/n;
}//刪除節點
publicstaticNodermNode(Nodehead,Nodenode){
Nodetemp=head;
while(temp.next!=null){
if(temp.next==node){
temp.next=node.next;
break;
}
else
temp=temp.next;
}
returnhead;
}//數組元素逆置
publicstaticint[]inverseArray(int[]arr){
intstart=0;
intend=arr.length-1;
for(;start<arr.length/2;start++,end--){
inttemp=arr[start];
arr[start]=arr[end];
arr[end]=temp;
}
returnarr;
⑺ Java 與 演算法+數據結構 (100分)
說數據結構沒用那是不可能的,但是要看你做什麼了。
比如說你要血java,如果你想搞網站方面的話就簡單了。
數據結構基本可以不用學,因為在web應用中,能用到的演算法的地方少之又少,幾乎就那麼幾個,想記不住都難。
但是如果你要往軟體方面和手軟方面發展的話就要學一部分了,但是這東西學是學不到的,能學到的只不過是思路,到時候自己發揮一下,想個演算法就行了,演算法這東西說難不難,難的東西有,但是沒有你能用到的。
像你這樣的情況我想說兩點:
首先,說你想從事演算法類的工作,那麼選擇什麼樣的語言都是一樣的,演算法肯定有,但是用到的都不多。剛進公司的時候一般是用不到演算法的,因為演算法都是別人想的,你也許有好的演算法,但是別人不一定採用,但是你的演算法基礎不要丟掉,因為等你當了項目經理後這個是必不可少的。
其次,你要知道,在學計算機的路上,很少有人能學什麼就做什麼,大家都在被社會潮流推動,想要不掉隊就只能隨波逐流。因為畢竟我們都不想一輩子寫代碼。大家都是拿這東西做個跳板。
學java的路很長,但是也很有趣,希望你能學好。我想以你的演算法基礎,以後想成為專業精英不是問題。加油吧。
⑻ Java演算法與數據結構代碼
第1題:我給你搭建演算法框架,具體需求,你只需往裡面寫Code即可:
publicclassProgram{
privatestaticfinalintN=6;
publicstaticvoidmain(String[]args){
Nodehead=newNode(-1,null);//定義頭指針,帶頭結點的單鏈表
for(inti=0;i<N;i++){
Nodee=newNode(i+1,null);
tailInsert(head,e);
}
//Test
Nodep=head;
while(p.getNext()!=null){
p=p.getNext();
}
}
/**
*@paramhead實施尾插法演算法的單鏈表頭指針
*@parame所需的元素
*/
privatestaticvoidtailInsert(Nodehead,Nodee){
Nodep=head;
while(p.getNext()!=null){
p=p.getNext();//尋訪單鏈表,直至到達單鏈表末尾
}
//實施尾插法
p.setNext(e);
}
}
classNode{
privateintid;//編號
privateNodenext;//單鏈表後繼指針
privateStringvote;//選票
publicNode(){}
publicNode(intid,Nodenext){
super();
this.id=id;
this.next=next;
}
publicNode(intid,Nodenext,Stringvote){
super();
this.id=id;
this.next=next;
this.vote=vote;
}
@Override
publicStringtoString(){
return"Node[id="+id+",next="+next+"]";
}
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicNodegetNext(){
returnnext;
}
publicvoidsetNext(Nodenext){
this.next=next;
}
}
第2題:參看我以前的回答:https://..com/question/431512924412893084
演算法思想已經寫的清楚得不能在清楚了。轉成Java就是小菜一碟。
⑼ java數據結構與演算法分析
於之前面試android的時候考到了很多關於java的知識,所以這次重溫數據結構知識就打算用java來學習,畢竟android是以java為基礎的,而且我現在學習的j2ee架構也是以java為基礎的。
java中的類就是對現實世界的對象的一種抽象,例如人就是一個類別,人有名字,聯系電話,住址等成員屬性,人擁有說話,吃飯,走路等成員方法。類就是這樣,定義了一種對象,它有什麼,會做什麼。
繼承——子類就是父類的一種特定類別。例如學生就是人的子類,學生屬於人,是特定的一類人。所以我們讓學生繼承人,這樣學生可以擁有人的屬性和方法,也就是說,學生也有了名字,聯系電話,住址等成員屬性,擁有說話,吃飯,走路等成員方法。但是學生還有特定的一些方法(讀書,上課),或者特定的一些屬性(學號,年級),這些可以添加在子類中。
因為每個子類都屬於父類,例如每個學生都屬於人,所以可以用父類來引用子類的對象:People p = new Student();反過來不行。
java中一個類只能繼承一個父類,也就是單繼承。
但一個類可以實現多個介面,間接地實現了多繼承。介面就是一系列方法的聲明,沒有實現。於之前面試android的時候考到了很多關於java的知識,所以這次重溫數據結構知識就打算用java來學習,畢竟android是以java為基礎的,而且我現在學習的j2ee架構也是以java為基礎的。
java中的類就是對現實世界的對象的一種抽象,例如人就是一個類別,人有名字,聯系電話,住址等成員屬性,人擁有說話,吃飯,走路等成員方法。類就是這樣,定義了一種對象,它有什麼,會做什麼。
繼承——子類就是父類的一種特定類別。例如學生就是人的子類,學生屬於人,是特定的一類人。所以我們讓學生繼承人,這樣學生可以擁有人的屬性和方法,也就是說,學生也有了名字,聯系電話,住址等成員屬性,擁有說話,吃飯,走路等成員方法。但是學生還有特定的一些方法(讀書,上課),或者特定的一些屬性(學號,年級),這些可以添加在子類中。
因為每個子類都屬於父類,例如每個學生都屬於人,所以可以用父類來引用子類的對象:People p = new Student();反過來不行。
java中一個類只能繼承一個父類,也就是單繼承。
但一個類可以實現多個介面,間接地實現了多繼承。介面就是一系列方