線性表的操作

2021-09-06 02:01:45 字數 3051 閱讀 9714

解法1 for迴圈

static void reverse(sqlist &a)

}

首位和末尾交換

解法2 while語句

static void reverse(sqlist &a)

}

兩者效果相同

解法3

for(int i=0;iint obj2 = a.elem[i];

a.elem[i]=a.elem[a.length-i-1];

a.elem[a.length-i-1]=obj2;

}

直接將以a.length/2為基礎,三種思想相同都是首末互換

即removeall方法帶有乙個條件,即如下c#**

public static void removetest()

));}

方法1

static void removeall(sqlist &a,int number)

else

a.elem[j]=0;

}a.length=i;

}

方法2

這個演算法關鍵在於記錄刪除元素的個數

static void removeall2(sqlist &a,int number)

else

i++;

}a.length-=k;

}

兩者也是等價的

根據你的需求改變上面劃線部分的條件即可

其他的待更新

//取交集

public static void intersect()

; int numbersb = ;

var list = new

list

();for (int i = 0; i < numbersa.length; i++)}}

}

//差集

public static void except()

; int numbersb = ;

var list = new

list

();for (int i = 0; i < numbersa.length; i++)

}if (allow)

}}

取並集是三個演算法中最耗時間的,多了一次迴圈

//並集

public static void uniontest()

; int numbersb = ;

list

list = new

list

();//copy numbersa first

foreach (var item in numbersa)

//compare two list

for (int i = 0; i < numbersb.length; i++)

}

演算法思想.如下

陣列中只有2個元素比較後才知道是否重複,所以迴圈可以從索引值1開始

比較時將未重複的元素與當前元素重新比較

將比較的索引值與最大索引值比較

實際例子如下

public static void distincttest()

; list

list = new

list

();int j = 0;

for (int i = 1; i < numbers.length; i++)

}int numbersb=new int[j+1];

array.copy(numbers, numbersb, numbersb.length);

}

1.合併成乙個新陣列

演算法思想:

用乙個迴圈先將a,b兩個陣列元素賦值到c中

其中畢竟有乙個陣列會先複製完成這取決於陣列最後乙個元素的大小,如果較大的大,則該陣列等退出迴圈後再補上,即其中一組迴圈是不會進去的

public static void merge1()

; int numbersb = ;

int i=0, j=0, k = 0;

int numbersc = new int[numbersa.length + numbersb.length];

while (i< numbersa.length && jif (numbersa[i] < numbersb[j])

else

k++;

}//only choice one

while (i< numbersa.length)

while (j < numbersb.length)

}

2.將陣列a複製到b中,並保持有序(前提元素數量足夠,不會溢位)

這個演算法相當於是給陣列b 新增a的元素,即在新增時候進行元素比較,若元素插入時在中間部分,則需要進行後移,對a陣列的每個元素呼叫insertorder方法(迴圈)

static int insertorder(sqlist &a,int value)//刪除線性表a中第i個元素起的k個元素    

a.elem[insertposition+1]=value; //插入值 a.length++; //長度+1

return ok;

} //insertorder

3.陣列a有m+n個元素,前m個和後n個元素均是有序,設計乙個演算法

使其有序

1.先比較m和n的數量,將數量較多的複製到陣列頭部(比如1,2,3,4,|5,8,)

2.按照insertorder方法,將數量少的部分重新插入陣列(需要注意的是陣列長度保持不變)

線性表操作

include stdio.h define maxsize 20 define overflow 1 define ok 1 define error 1 void init seqlist int length pointer 構造乙個空的線性表 int insert last int elem...

線性表操作

大概實現的功能 1 建立線性表類。線性表的儲存結構使用鍊錶。2 提供操作 自表首插入元素 刪除指定元素 搜尋表中是否有指定元素 輸出鍊錶。3 接收鍵盤錄入的一系列整數 例10,25,8,33,60 作為節點的元素值,建立鍊錶。輸出鍊錶內容。4 輸入乙個整數 例33 在鍊錶中進行搜尋,輸出其在鍊錶中的...

線性表操作

include using namespace std define maxsize 10000 typedef struct sqlist 在上述定義後,可以通過變數定義語句 sqlist l 將l定義為sqlist型別的變數,便可以利用 l.data i 1 來訪問表中位置 序號為i 的資料 i...