數據結構與演算法順序表
① 數據結構C語言——順序表的應用實例
第一個程序有兩個錯誤:
錯誤一:
SeqList *L;
init_SeqList(L);
應改成:
SeqList s;
SeqList *L = &s;
init_SeqList(L);
錯誤原因:指針只有在初始化(即只有在指向具體對象)之後才可以參與運算,你只定義了一個指針,並未將指針指向具體的對象,當執行到init_SeqList(L); 這句時,會產生越界報錯。
錯誤二:
printf("%d\t%s\n",L->elem[1].data,L->elem[1].n);
這個語句列印出來的永遠是第一個元素,而不是刪除的元素,應改成:
printf("%d\t%s\n",L->elem[i].data,L->elem[i].n); //其中i為被刪除元素的下標
提示:
給數組賦值時,循環最好從i=0開始,for(i=1;i<=2;i++)你從i=1開始,實際上是將值賦給了數組的第二個元素。
在工程上右鍵,new->Interface,然後輸入名字,Intf,這樣就會生成一個名為Intf.java的文件。內容如下:
public interface Intf {
public void add(int value);
public void add(int index, int value);
public void remove(int index);
public void print();
}
然後再右鍵,new->Class,輸入名字SqLis,新建一個名為SqLis.java的文件,內容如下:
import java.util.*;
public class SqLis implements Intf{
private List<Integer> list = new LinkedList<Integer>(Arrays.asList(12,23,32,45,11,14,35));
@Override
public void add(int value) {
// TODO Auto-generated method stub
list.add(value);
}
@Override
public void add(int index, int value) {
// TODO Auto-generated method stub
list.add(index, value);
}
@Override
public void remove(int index) {
// TODO Auto-generated method stub
list.remove(index);
}
@Override
public void print() {
// TODO Auto-generated method stub
System.out.println(list);
}
public static void main(String[] args){
SqLis list = new SqLis();
list.add(2, 34);
list.add(5, 50);
list.remove(3);
list.print();
}
}
編譯運行即可。記得採納
③ C語言 演算法與數據結構 順序表歸並的問題!小白求解
你聲明了L但是沒有給他分配內存
④ 數據結構-順序表-插入數組元素-時間復雜度
Pi(n-i+1)指的是你插入i元素以後,需要移動的元素的個數,然後你可以想一下,在第一個元素後面插入元素i需要移動n個元素,在第二個元素後面插入元素i需要移動元素(n-1)個元素,依此論推,在第n個元素後面插入元素i需要移動1個元素,這是一個等差數列,首項為n,公差為1,最後一項是1,你求和以後需要除以(n+1)就算出來結果了,忘採納,不懂可以加我QQ327579459,我可以給你講講。
⑤ 演算法與數據結構,請問,一個順序表,如何設計一個演算法,傳入順序表和一個參數x,排序使得在x前的元素比
排序里的快速排序,自己去查代碼吧
⑥ 數據結構與演算法中的問題,求解。對於順序表L,指出以下演算法的功能。
如圖
⑦ 順序表中如何查找多個值為e的元素 數據結構與演算法的題
你說的順序表指的是元素有序對吧?
這種順序情況下,用折半或者二分查找是最快的,你說的有多個e,那就是多個e也挨在一起,也就是找一個區間。
簡單點的方法就是查找區間的兩個邊界,
⑧ 數據結構與演算法: 我剛了解數據結構,,知道了什麼是線性表,它好像包括兩類。一類是順序表,是不是數組
你還沒有入門(說話有點直)。這里的插入和刪除方便與否是針對計算機的。
為什麼鏈表方便插入?因為鏈表實際上是邏輯上相鄰而物理上不相鄰。就是說你看上去他們是相鄰的,但是這些數字在計算機裡面存儲的位置卻不是相鄰的。最簡單的鏈表的每個結點有兩個域,一個是存數值,一個是存它的下一個元素的地址。所以鏈表在插入和刪除的時候,只需要修改一個元素的表示地址的域。
那為什麼數組的插入和刪除不方便?因為數組是物理和邏輯都是相鄰的,也就是說存儲一個數組是需要一整片連續的存儲空間,這樣會讓查找跟方便,因為可以根據起始地址和下標直接算出你要找的元素的地址。數組在插入和刪除的時候,都是需要移動元素的。
你說在數組的3,4中間插入8,計算機的實際過程是先把4,5,6整體往後移動一個存儲單元,然後把8放入。如果是鏈表插入,那就只需要把8的地址域改成指向4,然後把3的表示下一個元素的地址改成8的地址.你所說的在3,4中間打一個8,這個操作不叫插入,這叫重新定義了一個數組。插入和刪除都是指在原數組基礎上的。
元素很少的時候這樣的區別肯定不是很明顯,假如有10000個數據,你需要在第1個位置插入一個元素,數組需要移動10000次數據,而鏈表只要修改兩個地址域即可。
記住,要站在計算機的角度去想問題。