問題描述:有乙個帶頭結點的單鏈表l,設計乙個演算法使其元素遞增有序。(空間複雜度要求為o(1))。
演算法思想:解決本題的思想類似於直接插入排序的思想。先構成只含乙個資料結點的有序單鏈表,然後依次遍歷單鏈表l中剩下的結點。在有序單鏈表中插入時,需要依次遍歷有序單鏈表,直到找到插入位置,使得插入後有序單鏈表仍然有序。每當完成一次操作,鍊錶l中元素減1,有序表中元素加1,直到鍊錶l為空時結束。所以本演算法的時間複雜度為o(n2).
演算法**:
void sort(linklist &l)
p->next = pre->next;//在有序表的相應位置插入
pre->next = p;
}}
完整**:
#include#include#includeusing namespace std;
typedef char elemtype;
typedef struct lnodelnode,*linklist;
void create(linklist &l)
p->next = null;
}void sort(linklist &l)
p->next = pre->next;//在有序表的相應位置插入
pre->next = p; }}
int main()
system("pause");
return 0;
}
執行結果:
有序單鏈表
由標題就可以知道,這篇部落格我們使用的是在插入時就已經排好序的單鏈表.我把它命名為 orderedlist 這裡我們從小到大排序,下面我們以此看一下它的主要方法與 實現就好 主要方法 插入節點 override public void insert int key else else if p.ne...
判斷帶表頭的單鏈表是否有序遞增
設計乙個演算法判定帶表頭結點的單鏈表是否有序遞增,並討論演算法的時間複雜度。判斷是否有序遞增status order headerlist h,int n else flag 1 p q q q link if flag 1 else printf yes return ok include inc...
DS 有序單鏈表刪除重複元素
題目描述 根據乙個遞增的整數序列構造有序單鏈表,刪除其中的重複元素 輸入輸入包括多組測試資料,每組測試資料佔一行,第乙個為大於等於0的整數n,表示該單鏈表的長度,後面跟著n個整數,表示鍊錶的每乙個元素。整數之間用空格隔開 輸出針對每組測試資料,輸出包括兩行,分別是刪除前和刪除後的鍊錶元素,用空格隔開...