資料結構 線性表的順序表示(6 10)

2021-07-22 20:28:14 字數 1654 閱讀 1902

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 尾插法建立 同頭插 按序號查詢結點值...