6 . 從有序表中刪除所有其值重複的元素,使表中所有元素均不同。
演算法思想:相同元素一定在連續的位置上,所以如果不同則插入到前面所有非重複的有序表的最後。
void del_all__du(sqlist &l)//delete all duplicate
else
l.data[i - count] = l.data[i];
}l.length -= count;
}
7 . 將兩個有序表合併成乙個新的有序線性表,並由函式返回結果順序表。
演算法思想:按順序不斷取下兩個順序表頭較小的節點存入新的順序表,然後剩下的加到新錶的後面。
void
merge(sqlist
a,sqlist
b,sqlist &c)
else
}while (i < a.length)
while (j < b.length)
c.length = count;
}
8 . 已知在一維陣列a[m+n]中依次存放著兩個線性表(a1,a2,a3,…,am)和(b1,b2,b3,…,bn),試編寫乙個函式,將陣列中兩個順序表互換,即將(b1,b2,b3,…,bn)放在(a1,a2,a3,…,am)的前面。
演算法思想:將兩個線性表分別轉置,再將a轉置。
void reverse(sqlist &a,int a,int b)
}
9 . 線性表(a1,a2,a3,…,an)中元素遞增有序,且按順序儲存於計算機內。要求設計一演算法完成用最少時間在表中查詢資料值為x的元素;若找到,將其與後繼元素位置交換;若找不到將其插入到表中,使表中的元素仍遞增有序。
演算法思想:折半查詢
bool searchexchangeinsert(sqlist &a,int x)
else
if (a.data[mid] >= x)
else
}for (i = a.length - 1; i > high; i--)
a.data[i + 1] = x;
a.length++;
return true;
}
10 .乙個長度為l(l ≥1) 的公升序序列s,處在第 l/2 個位置的數稱為s的中位數。例如,若序列s1=(11,13,15,17,19),則s1的中位數是15;
兩個序列的中位數是含它們所有元素所組成的公升序序列的中位數。例如,若s2=(2,4,6,8,20),則s1和s2的中位數是11。
現在有兩個等長公升序序列a和b,試設計乙個在時間和空間都盡可能高效的演算法,找出兩個序列a和b的中位數。
演算法思想:如果s1[l/2]大於s2[l/2],則在s1[l/2]前半截中再找中位數,s2[l/2]後半截找中位數。etc.
int findmid(int a, int b)
else
}else
if(a[m1]>b[2])else
}else
}return a[s1]}
資料結構 線性表的順序表示
1.相關概念 2.順序表的型別定義 順序表的儲存結構 define max 100 順序表可能達到的最大長度 typedef struct sq sqlist elemtype是乙個抽象資料型別 可以是int,float,double等或者是自定義的資料型別。在實際使用是可以使用int,float等...
資料結構之線性表(順序表示)
順序表定義 define maxsize 50 typedef struct sqlist 陣列動態分配 define maxsize 50 typedef struct sqlist 動態分配的語句 c l.data elemtype malloc sizeof elemtype initsize...
資料結構(2) 線性表的順序表示
順序表基本操作 插入操作 最壞情況o n 最好情況o 1 平均情況o n 刪除操作 最壞情況o n 最好情況o 1 平均情況o n 按值查詢 最壞情況o n 最好情況o 1 平均情況o n 單鏈表操作 頭插法建立 插入時間o 1 設煉表長度n,總時間複雜度o n 尾插法建立 同頭插 按序號查詢結點值...