當前位置:編程學習大全網 - 編程語言 - C++編程對鏈表裏面的數據怎麽從大到小排序?

C++編程對鏈表裏面的數據怎麽從大到小排序?

typedef struct Data{

int money;

struct Data *next;

}DATA;

// 實現鏈表的排序函數(這裏是壹個單向鏈表的排序實現)

DATA* test(DATA* head){

DATA *pi;

DATA *pj;

DATA *prev_i=NULL;

DATA *prev_j=NULL;

int count=0; // 如果count=0,就是鏈表頭部與其他元素交換,否則就是內部元素之間進行交換

// 冒泡進行鏈表排序(由大到小)

for(pi=head;pi;pi=pi->next){

prev_j = NULL;

for(pj=pi; pj; pj=pj->next){

if(pi->money < pj->money){

if(count >0){

prev_i->next = pj;

}

DATA *p1 = pi;

DATA *p2 = pj;

if(pi->next == pj){ // 兩個元素之間相鄰的

// 進行交換

DATA *tmp = p1;

p1->next = p2->next;

p2->next = p1;

}else{ // 兩個元素之間不相鄰的

// 進行交換

prev_j->next = p1;

DATA *tmp = p1->next;

p1->next = p2->next;

p2->next = tmp;

}

// 保持pi,pj指向的鏈表對應下標位置不變

pi = p2;

pj = p1;

// 讓頭指針指向包含money值最小的元素

if(count == 0){

head = pi;

}

}

prev_j = pj; // 指向pj指向的前壹個元素

}

count++;

prev_i = pi; // 指向pi的前壹個元素

}

// 打印驗證

return head;

}

  • 上一篇:積木品牌排行榜
  • 下一篇:幼兒園大班繪畫春天來了教案
  • copyright 2024編程學習大全網