採取冒泡的思想,一次選取兩個,再套一層迴圈即可,但是由於在鄰接表中表頭節點和邊表節點的資料型別並不一樣,因此這相當於乙個沒有頭結點的鍊錶的排序。
可以優化一下的是:如果走一遍沒有發生交換,說明已經有序了,因此就不用再進行冒泡了。可以直接跳出迴圈,減少迴圈次數。
在邊表節點中,我儲存的是string型別的資料,按照其在表頭節點中的索引順序從大到小排序,這樣便於在dfs和bfs的過程中對同乙個圖得到一樣的結果,而不因使用者輸入的不同而使得結果不同。
mapmmp;//對映字串和座標之間的關係struct arcnode//邊表節點
;struct vertexnode//頂點表節點
;
class graph;
void graph::sortlist(vertexnode nil)if(cnt<=1)
//printf("cnt=%d\n",cnt);
arcnode *tmp;
int ok=1;
for(int i=0;inext;
ok=1;
while(now)
pre=now;
now=pre->next;
}if(ok==1)
}/*pre=nil.firstarc;
while(pre)
*/}
void graph::sort()
鍊錶 排序鍊錶
樂扣原題 definition for singly linked list.public class listnode class solution 將鍊錶轉化為陣列 listlist new arraylist while null head 陣列遞增排序 collections.sort li...
鍊錶與鄰接表
對於稀疏圖來說,m要遠遠小於n21 2 3 4 5 6 4 5 1 4 9 4 3 8 1 2 5 2 4 6 1 3 7 第一行兩個整數n m。n表示頂點個數 頂點編號為1 n m表示邊的條數。接下來m行表示,每行有3個數x y z,表示頂點x到頂點y的邊的權值為z。下圖就是一種使用鍊錶來實現鄰接...
鍊錶與鄰接表
鍊錶 陣列是一種支援隨機訪問,但不支援在任意位置插入或刪除元素的資料結構。與之相對應,鍊錶支援在任意位置插入或刪除,但只能按順序依次訪問其中的元素。我們可以用乙個struct 表示鍊錶節點,其中可以儲存任意資料 另外用prev和next兩個指標指向前後相鄰的兩個節點,構成乙個常見的雙向鍊錶結構。為了...