7月30日 關於鍊錶的合併排序

2021-09-25 17:28:14 字數 3129 閱讀 8891

1、題目:建立兩個學生鍊錶,含有姓名、年齡的資訊,乙個鍊錶存放男生,乙個鍊錶存放女生

2、題目:將上面兩個鍊錶合併,按學生的年齡進行排序,合成新的鍊錶

3、題目:將上題中建立的鍊錶進行反轉,實現按年齡的逆序排列

4、題目:在上面的實現的新鍊錶中,給定乙個年齡,迅速查詢和該學生年齡最接近的學生姓名

#include #include #include #define n 3

struct node

;typedef struct node node;

typedef struct node* link;

void create_node(link *node) //建立結點

}void create_link(link *head) //建立鍊錶

void insert_node_tail(link head,link new_node) //尾插

void display_link(link head) //輸出

p = head->next;

if(p == null)

while(p != head)

}void display_link_inv(link head) //逆序輸出

p = head->prior;

if(p == null)

while(p != head)

}void merge_link(link head,link boy,link girl) //合併鍊錶

int get_length(link head) //計數

p = head->next;

while(p != head)

return count;

}void exchange(link head,int length)

p = p->next;

q = q->next;

m = m->next;

}p = head;

q = p->next;

m = q->next;

}}void sort_link(link head) //排序

void search_name(link head) //查詢

while(p != head && fabs(p->age - age) <= 5)

}int main()

display_link(boy);

display_link(girl);

printf("\n");

link head = null;

create_link(&head);

merge_link(head,boy,girl); //合併鍊錶

display_link(head);

printf("\n");

sort_link(head); //排序

display_link(head);

printf("\n");

display_link_inv(head); //逆序輸出

search_name(head); //查詢年齡相近的人

return 0;

}

6、題目:實現乙個函式,把兩個從大到小的有序鍊錶合併成乙個鍊錶,新的鍊錶是乙個從小到大的有序鍊錶。

可以分成兩個思路:

(1)先把兩個鍊錶合併成乙個鍊錶,合併後的鍊錶從大到小排序

(2)將鍊錶逆置,得到從小到達排序的鍊錶

#include #include #include struct node

;typedef struct node node;

typedef struct node* link;

void create_node(link *node)

}void create_link(link *head)

void insert_node_sort(link head,link new_node) //邊插入邊排序

new_node->next = p;

new_node->prior = p->prior;

p->prior = new_node;

new_node->prior->next = new_node;

}void display_link(link head)

p = head->next;

if(p == null)

while(p != head)

}void display_link_inv(link head) //逆序輸出

p = head->prior;

if(p == null)

while(p != head)

}void merge_link(link head,link a,link b) //合併鍊錶

int get_length(link head) //得到結點個數

p = head->next;

if(p == null)

while(p != head)

return count;

}void exchange(link head,int length)

p = p->next;

q = q->next;

m = m->next;

}p = head;

q = p->next;

m = q->next;

}}void bubber_sort(link head) //冒泡

int main()

display_link(a);

printf("\n");

display_link(b);

printf("\n");

link head;

create_link(&head);

merge_link(head,a,b); //合併鍊錶

display_link(head);

printf("\n");

bubber_sort(head); //氣泡排序

display_link(head);

printf("\n");

display_link_inv(head); //逆序輸出

printf("\n");

return 0;

}

合併排序的鍊錶 leetcode

劍指 offer 25.合併兩個排序的鍊錶 輸入兩個遞增排序的鍊錶,合併這兩個鍊錶並使新鍊錶中的節點仍然是遞增排序的。示例1 輸入 1 2 4,1 3 4 輸出 1 1 2 3 4 4 選擇兩個鍊錶中的某個鍊錶作為基準 main 將另乙個鍊錶上的元素按照順序要求插入到基準鍊錶 exta 中 設定乙個...

兩鍊錶合併,並排序

思想很簡單,我的思想不一定官方 沒考慮時間複雜度以及 的簡易 思想 先把乙個單鏈表插入到另乙個單鏈表然後在做排序 include include using namespace std typedef int elemtype typedef struct lnode linknode void i...

合併排序鍊錶(劍指offer)

合併排序鍊錶 劍指offer struct listnode listnode mergelist listnode pheadlist1,listnode pheadlist2 判斷指標是否為空 if pheadlist2 null listnode pmergelisthead null 合併後...