DS 002 順序表 逆置所有元素

2021-08-28 13:29:12 字數 893 閱讀 5527

問題.設計乙個高效的演算法,將順序表所有元素逆置,要求演算法的空間複雜度為o(1)。

演算法思想:將第乙個元素與最後乙個元素互換,第二個元素與倒數第二個元素互換,以此類推。

偽**:

void reverse(sqlist &l){

elemtype temp; //中間變數

for(i=0; i解析:

空間複雜度是o(1)表示演算法所需要的輔助空間是常數。

函式型別void,不返回任何值。函式名reverse。使用時需要傳遞順序表位址作為引數。

l.data表示l中的資料,l.length表示資料的個數。

直接最後乙個元素的值賦給第乙個元素,第乙個元素的值消失了,兩個元素的值相同,不能完成交換。

不知道順序表儲存的是什麼型別的資料,中間變數型別直接elemtype抽象表示。

for迴圈,從i=0開始計數,如果滿足i的值小於順序表長度的一半,執行花括號的內容,執行完畢後i自增1。繼續判斷是否滿足i的值小於順序表長度的一半的條件。

temp存放前面元素的值。

將後面元素的值賦給前面的元素。最初,最後乙個元素的值賦給第乙個元素。

陣列這裡順序表的下標是從0開始。最後乙個元素的下標比陣列長度少1。

如果順序表長度是奇數,比如9,c語言中9/2保留整數是4。執行到i=3時是最後一次迴圈,l.data[3] 表示第4個元素的值,l.data[9-3-1]表示第6個元素的值,交換它們。剛好第5個元素的值不用交換。

如果順序表長度是偶數,比如8,執行到i=3時是最後一次迴圈,l.data[3] 表示第4個元素的值,l.data[8-3-1]表示第5個元素的值,交換它們。1和8互換,2和7互換,3和6互換,4和5互換。或者4+5 = 1+8,驗證成功。

這裡&l,給出的引數是l的位址,所以函式內部可以直接對l所在的儲存空間進行操作。

順序表 元素逆置(首尾交換)

題意 要求空間複雜度為o 1 順序表的儲存結構 typedef struct sqlist 分析 這裡要實現元素的逆置。想想和單鏈表的區別。這裡如何逆置?單鏈表是如何逆置的?這裡是首尾交換元素,常用那個交換操作。而單鏈表有兩種方法,一是頭插法,二是修改指標。思路 1.定義迴圈變數i 和中間變數x,用...

DS之順序表實現輸入資料逆置

實現輸入資料逆置和順序表實現排序是兩個極其相似的過程,因此使用的順序表的基本操作也是一樣的 0基本操作前的準備,1初始化順序表,6向順序表插入資料元素。要想實現輸入資料元素的逆置還需要乙個逆置函式,逆置函式在c c 語言中早已接觸過,因此不陌生,記得在做大量的c 的程式 補充的大題就寫過不下數十遍,...

順序表的就地逆置

讀入乙個順序表,實現順序表的就地逆置。輸入 先輸入乙個小於100的正整數n,再從小到大的輸入n個正整數,建立乙個順序表,然後實現順序表的就地逆置。輸出 按順序輸出逆置後的順序表的所有元素,每個元素佔一行。輸入樣例 3 300 3000 50000 輸出樣例 50000 3000 300 includ...