日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【练习】归并和冒泡两种方法c++将两个无序链表合并为一个升序的有序链表

發布時間:2024/9/30 c/c++ 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【练习】归并和冒泡两种方法c++将两个无序链表合并为一个升序的有序链表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義:

struct node {int data;node* next;};

新建有頭指針的鏈表:

struct node *head; head = NULL;//頭指針初始為空 struct node *p; //動態申請一個空間,用來存放一個結點,并用臨時指針p指向這個結點 p=(struct node *)malloc(sizeof(struct node)); scanf("%d",&a); p->data=a;//將數據存儲到當前結點的data域中 p->next=NULL;//設置當前結點的后繼指針指向空,也就是當前結點的下一個結點為空

完整版本:

#include <stdio.h> #include <stdlib.h> //這里創建一個結構體用來表示鏈表的結點類型 struct node { int data; struct node *next; }; int main() { struct node *head,*p,*q,*t; int i,n,a; scanf("%d",&n); head = NULL;//頭指針初始為空 for(i=1;i<=n;i++)//循環讀入n個數 { scanf("%d",&a); //動態申請一個空間,用來存放一個結點,并用臨時指針p指向這個結點 p=(struct node *)malloc(sizeof(struct node)); p->data=a;//將數據存儲到當前結點的data域中 p->next=NULL;//設置當前結點的后繼指針指向空,也就是當前結點的下一個結點為空 if(head==NULL) head=p;//如果這是第一個創建的結點,則將頭指針指向這個結點 else q->next=p;//如果不是第一個創建的結點,則將上一個結點的后繼指針指向當前結點 q=p;//指針q也指向當前結點 } //輸出鏈表中的所有數 t=head; while(t!=NULL) { printf("%d ",t->data); t=t->next;//繼續下一個結點 } getchar();getchar(); return 0; }

合并采用先分別升序后再進行合并兩個有序鏈表,分別升序采用雙指針和遞歸調用。先看用歸并排序:

用歸并排序:

node* merge(node* p,node*p2) {//這里是合并的排序node* src = new node;src->next = nullptr;//src->data = 0;node* now = src;node* a1 = p;node* a2 = p2;while (a1 != NULL && a2 != NULL) {if (a1->data >= a2->data) {node* tem = a2->next;src->next = a2;a2 = tem;}else {node* tem = a1->next;src->next = a1;a1 = tem;}src = src->next;//合并兩個有序鏈表 src->next=nullptr}if (a1 != NULL) src->next = a1;if (a2 != NULL)src->next = a2;return now->next;} node* merge_sort(node* p) {//這是將一個鏈表進行升序if (p == nullptr || p->next == nullptr) return p;node* fast = p;node* slow = new node;slow->data = 0;slow->next = p;while (fast != NULL && fast->next != NULL) {fast = fast->next->next;slow = slow->next;}node* rhead = slow->next;slow->next = NULL;node* lh = merge_sort(p);node* rh = merge_sort(rhead);node* after = merge(lh, rhead);return after; } int main() {srand(0);node* m = new node;m->data = rand()%5;//cout << m->data;node* n = new node;n->data = rand()%7;m->next = n;node* nn = new node;nn->data = rand()%8;n->next = nn;nn->next = nullptr;node* copy_m = m;cout << "第一個鏈表:";while (copy_m) {cout << copy_m->data;copy_m = copy_m->next;}cout << endl;node* m2 = new node;m2->data =rand()%18;node* n2 = new node; n2->data = rand() % 13;m2->next = n2;node* nn2 = new node;nn2->data = rand()%15;n2->next = nn2;nn2->next = nullptr;node* copy_n = m2;cout << "第二個鏈表:";while (copy_n) {cout << copy_n->data;copy_n = copy_n->next;}cout << endl;node*one = merge_sort(m);node*two= merge_sort(m2);node* new_m = merge(one,two);node* nice = new_m;cout << endl;cout << "合并兩個有序鏈表后的結果:";while (nice) {cout << nice->data << "->";nice = nice->next;} }

結果:

用冒泡排序:

node* merge_sort(node* p) {//這是將一個鏈表進行升序if (p == nullptr || p->next == nullptr) return p;node* mana = p;node* pp = mana;for (int i = 0; i < len(p) - 1; i++) {mana = p;for (int j = 0; j < len(p) - i - 1; j++) {node* t1 = mana;node* t2 = mana->next;if (t1->data > t2->data) {int tem = t1->data;t1->data = t2->data;t2->data = tem;}mana = mana->next;}}return pp; } int main() {srand(0);node* m = new node;m->data = rand()%12;//cout << m->data;node* n = new node;n->data = rand()%17;m->next = n;node* nn = new node;nn->data = rand()%18;n->next = nn;node* nnn = new node;nnn->data = rand() % 23;nnn->next = NULL;nn->next = nnn;node* copy_m = m;cout << "第一個鏈表:";while (copy_m) {cout << copy_m->data<<"-";copy_m = copy_m->next;}cout << endl;node* m2 = new node;m2->data =rand()%18;node* n2 = new node; n2->data = rand() % 13;m2->next = n2;node* nn2 = new node;nn2->data = rand()%15;n2->next = nn2;nn2->next = nullptr;node* copy_n = m2;cout << "第二個鏈表:";while (copy_n) {cout << copy_n->data << "-";copy_n = copy_n->next;}cout << endl;node*one = merge_sort(m);node*two= merge_sort(m2);node* new_m = merge(one,two);node* nice = new_m;cout << endl;cout << "合并兩個有序鏈表后的結果:";while (nice) {cout << nice->data << "->";nice = nice->next;} }

總結

以上是生活随笔為你收集整理的【练习】归并和冒泡两种方法c++将两个无序链表合并为一个升序的有序链表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 最近更新中文字幕 | 69堂精品| 少妇人妻在线视频 | 91福利视频在线 | 懂色av一区二区三区免费 | 国产一区二区福利 | 国产日产精品一区 | 国产一国产精品一级毛片 | 亚洲97色 | 精品亚洲乱码一区二区 | 夜夜高潮夜夜爽 | 亚洲欧洲日韩av | 香蕉av一区二区三区 | 91网站在线免费观看 | 91娇羞白丝网站 | 免费播放片大片 | 这里只有精品免费视频 | 亚洲AV无码阿娇国产精品 | 欧美一区二区久久久 | 日产亚洲一区二区三区 | 久久婷婷国产麻豆91 | 韩国av电影在线观看 | 香蕉伊人网 | 国产主播一区二区 | 国产精品久久久久久亚洲毛片 | 色欧美亚洲 | 国产精品久久久久久久成人午夜 | 一本色道久久hezyo无码 | www.色婷婷| 91精品国产91 | 在线www| 女人下面流白浆的视频 | 成人av中文解说水果派 | 中国挤奶哺乳午夜片 | 欧美日韩色综合 | 一个人免费在线观看视频 | 亚洲精品乱码久久久久久蜜桃图片 | 91超级碰 | 亚洲国产成人精品一区二区三区 | 国产亚洲精品久久久久久打不开 | 94av| 国产男女啪啪 | 噜噜狠狠狠狠综合久久 | 日韩色视频在线观看 | 狠狠操在线 | 色网站免费看 | 色久在线| 好吊操av| 蜜桃视频久久 | 男人与雌性宠物交啪啪 | 久久久久亚洲av成人毛片韩 | 成人免费视频大全 | 黄色av中文字幕 | 国产69精品久久久久999小说 | 奇米四色7777| 亚洲综合日韩精品欧美综合区 | 牲欲强的熟妇农村老妇女视频 | 视频在线中文字幕 | 国产黑丝一区 | 免费看女人裸体 | 亚洲综合精品一区 | 亚洲av无码一区二区二三区软件 | 欧美一区二区三区影院 | 久久婷婷综合色 | 樱花草涩涩www在线播放 | 日本美女动态 | www.青青草 | 日韩欧美中字 | 91日本在线 | 香蕉一区二区三区四区 | 少妇饥渴放荡91麻豆 | 性午夜 | 少妇精品无码一区二区三区 | hs网站在线观看 | 91视频免费看 | 色999视频 | 在线免费小电影 | 黄色在线免费视频 | 国产亚洲网站 | 国产精品欧美激情在线 | 91啪在线观看 | 精品午夜福利在线观看 | 国产区一二三 | 亚洲国产情侣 | 一区二区亚洲 | 丁香色综合 | 丰满大肥婆肥奶大屁股 | yw在线观看 | 青青操狠狠干 | 国产在线美女 | 久久精品国产亚洲av成人 | 亚洲妇女av | 啪啪天堂 | 黄色网址大全免费 | 秒拍福利视频 | 国产精品无码毛片 | 寡妇激情做爰呻吟 | 免费精品久久 | 免费人成在线观看网站 |