鍊錶實現的穩定paration

2021-08-26 05:29:24 字數 906 閱讀 6389

我們知道樸素的paration是不能保證穩定性的。

現在來看乙個用鍊錶實現的穩定paration。

題目要求就是給你乙個鍊錶和乙個劃分元素num,要求左部小於num,中間等於num,右部大於num,並要求三塊內部保持原鍊錶的相對次序不變。

1.弱化約束:如果不保持穩定性

1)按照陣列的paration,設計乙個less指標和乙個more指標以及他們各自的end指標,初始化為null。

2)遍歷鍊錶:

a.遇到的元素小於num:

a.如果less==null,和鍊錶第乙個節點交換後,讓less和less-end等於它

b.如果less!=null,和less-end->next交換後,讓less-end等於它

b.遇到的元素大於num:

a.如果more==null,和鍊錶最後乙個節點交換後,讓more和more-end等於它

b.如果more!=null,和more-end->next交換後,讓more-end等於它

c.遇到的元素等於num,直接跳過去即可

2.強化約束:保持穩定性

解法:設計六個指標,less、equal、more以及他們各自的end指標,初始化全部為空:

1)遍歷一遍鍊錶,找到乙個小於、等於、大於num的結構元素,各自放在less、equal、more以及他們的end上,然後再次遍歷:

1.遇到的元素小於num,如果當前位址不等於less,將其串在與less同組的end指標下,如果等於,直接跳過

2.遇到的元素小於num,如果當前位址不等於equal,將其串在與equal同組的end指標下,如果等於,直接跳過

3.遇到的元素大於num,如果當前位址不等於more,將其串在與more同組的end指標下,如果等於,直接跳過

2)最後將三個子煉表串起來

邊界情況:某個子煉表為空

鍊錶的實現

鍊錶是一種非常重要的資料結構,比起陣列來雖然操作繁瑣,查詢效率也不如陣列效率高,但在進行插入刪除操作時,鍊錶具有陣列無法比擬的效率,下面的 是鍊錶的實現 include include include define n 100 typedef struct node link link node i...

鍊錶的實現

include using namespace std template class linklist node head public linklist t a,int n 0 利用尾插法來構建線性鍊錶 linklist bool isempty 不為空,則返回0,為空則返回非0 t getnod...

鍊錶的實現

記憶體結構 鍊錶也是資料結構的一種,但是和陣列不一樣,陣列在記憶體中每個節點的位置是相連的。而鍊錶的每個節點在物件中是分散的,依靠引用相連。優點1 單鏈表在增加和刪除上要比陣列結構更加快捷。原因 因為順序表在記憶體中是相連的,所以刪除乙個節點,在該節點之後的節點都要隨之前移,所以效率不高。而單鏈表使...