鍊錶的排序問題(C實現)

2021-09-29 01:53:50 字數 2021 閱讀 4861

昨天室友讓我幫忙寫道考研輔導題,這道題主要就是考鍊錶的排序,由於沒有時間限制,就直接暴力破解了,後面抽時間再總結一下鍊錶的排序幾種演算法。

用c語言寫這種資料結構的問題,最大的問題就是構造資料結構,這裡我構造了乙個單向鍊錶儲存員工資訊,由於沒有限制長度,這裡我以『-』作為輸入結束的標誌,在這裡最難的點就是對於輸入的理解(scanf\getchar())。

輸入函式:

list readinput()  /* 輸入,帶頭結點 */

scanf("%c", &p->id[i]);

if(p->id[i] == ' ' || p->id[i] == '\n')

} if(f == 1)

for(i = 0; i < 19 ; i++) // 錄入姓名,空格說明結束

} scanf("%f", &p->wage); // 錄入工資

// puts(p->id);

// puts(p->name);

// printf("%.2f\n", p->wage);

}return l; // 返回頭結點

}

其實**可以寫的更簡潔些,尤其是在從第二行開始消除回車影響以及判斷輸入結束條件這部分!

輸出函式:

void print(list l)

}

求鍊錶長度:

int length(list l)

return i;

}

排序:

list sort(list l)	// 按工資排序 

} }

free(t);

}

後面再將其他幾種排序演算法加進去,爭取將時間複雜度降到最低。

求中位數:

float f(list l, int len)

else

}

主函式:

int main()

源程式:

#include #include #include struct salary;

typedef struct salary *list;

int length(list l); /* 求鍊錶長度 */

list readinput(); /* 輸入 */

list sort(list l); /* 排序 */

float f(list l, int len); /* 員工工資中位數 */

void print(list l); /* 輸出 */

int main()

list readinput() /* 輸入,帶頭結點 */

scanf("%c", &p->id[i]);

if(p->id[i] == ' ' || p->id[i] == '\n')

} if(f == 1)

for(i = 0; i < 19 ; i++) // 錄入姓名,空格說明結束

} scanf("%f", &p->wage); // 錄入工資

// puts(p->id);

// puts(p->name);

// printf("%.2f\n", p->wage);

}return l; // 返回頭結點 }

void print(list l)

}list sort(list l) // 按工資排序

} }

free(t);

} int length(list l)

return i;

} float f(list l, int len)

else

}

php 實現鍊錶的排序

leetcode 148 排序乙個無序鍊錶 說明 1.通過快慢指標找到鍊錶的中間位置,low 表示右邊鍊錶 2.左邊鍊錶理解起來就比較費事了。左邊鍊錶 因為物件賦值是引用拷貝。所以,當 low 變化的時候,head 會記錄變化,通過 low next null 終止變化,得到左鍊錶。2.然後再通過有...

leetcode 鍊錶的排序問題

題目描述 在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序。例如 輸入 4 2 1 3 輸出 1 2 3 4。思路分析 因為要求在o nlogn 的時間複雜度,所以想到使用歸併排序。下面對歸併排序做個介紹。歸併排序 基本方法如下 1 把待排序序列的n個記錄看成n個有序子串行,每...

排序演算法 鍊錶實現

陣列的高效體現於隨機訪問,插排 快排等排序演算法未用到這一特點,故這兩種排序演算法可基於鍊錶實現 插入排序 迭代器 p順序訪問鍊錶 迭代器 i順序訪問前 p 個元素 主要的操作為 當p i p.value刪除原位置的 p將p插入 i 1 與 i 之間 若為單向鍊錶,儲存 i 1與 p 1 演算法複雜...