C語言:單鏈表實現(二) 就地逆置,就地歸併
#include<iostream> #include<stdio.h> #include<math.h> #define LEN sizeof(struct Nodelist) using namespace std; typedef struct Nodelist { int data;; struct Nodelist *next; }Nodelist; //函式宣告 void Error(char *s); //錯誤處理函式 Nodelist *CreatNode(void); //後插法建立單鏈表 Nodelist *ReverseList(Nodelist *head); //就地逆置函式 void MeryNode(Nodelist &l1, Nodelist &l2); //就地歸併函式 void printNode(Nodelist L); //輸出函式 //函式定義 void Error(char *s) //錯誤處理函式 { cout << s << endl; exit(1); } Nodelist *CreatNode(void) //後插法建立單鏈表 { int i, n; Nodelist *head, *p, *q; p = q = NULL; head = NULL; cout << "請輸入您要建立的連結串列長度:"; cin >> n; cout << "請輸入您要輸入的資料:" << endl;; for (i = 0; i<n; ++i) { p = (Nodelist *)malloc(LEN); cin >> p->data; if (head == NULL) //單個結點 q = head = p; else q->next = p; q = p; } p->next = NULL; return head; } void printNode(Nodelist L) //將連結串列依次資料輸出 { Nodelist *p = &L; while (p) { cout << p->data << " "; p = p->next; } cout << endl; } Nodelist *ReverseList(Nodelist *head) //就地逆置函式 { Nodelist *p, *q, *r; p = head; q = r = NULL; while (p) { q = p->next; p->next = r; r = p; p = q; } return r; } void MeryNode(Nodelist &l1, Nodelist &l2) //就地歸併函式 { Nodelist *pa, *pb, *pc, *pd; pa = &l1; pb = &l2; pc = pa; while (pa&&pb) { if (pa->data <= pb->data) { pc = pa; pa = pa->next; } else { pd = pb->next; pb->next = pa; pc->next = pb; pc = pb; pb = pd; } } if (pb!=NULL) pc->next = pb; } int main() //主函式測試 { Nodelist *head1, *head2; head1 = CreatNode(); cout << "逆置前的連結串列資料:" << endl; printNode(*head1); Nodelist *head3 = ReverseList(head1); cout << "逆置後的連結串列資料:" << endl; printNode(*head3); head2 = CreatNode(); cout << "逆置前的連結串列資料:" << endl; printNode(*head2); Nodelist *head4 = ReverseList(head2); cout << "逆置後的連結串列資料:" << endl; printNode(*head4); cout << "就地歸併後:" << endl; MeryNode(*head3, *head4); printNode(*head3); return 0; }
相關推薦
C語言:單鏈表實現(二) 就地逆置,就地歸併
#include<iostream> #include<stdio.h> #include<math.h> #define LEN sizeof(struct Nodelist) using namespace std; typedef
C語言面向物件程式設計:單鏈表實現(5)
前面我們介紹瞭如何在 C 語言中引入面嚮物件語言的一些特性來進行面向物件程式設計,從本篇開始,我們使用前面提到的技巧,陸續實現幾個例子,最後呢,會提供一個基本的 http server 實現(使用 libevent )。在這篇文章裡,我們實現一個通用的資料結構:單鏈表。
java不用api實現單鏈表反轉(二)
這篇部落格主要講述反轉連結串列相關思路。兩種方法:時間複雜度均為O(n),空間複雜度均為O(1) 方法一:頭插法 頭插法不僅可以建立單鏈表,還可以利用其思路反轉連結串列。首先把頭節點拆下,剩下的節點依次遍歷,採用頭插法,相當於從新建立連結串列。 p
c語言數據類型(二)
nbsp tex 字符 pre 字符串 輸入 mce 一個 命令 char 類型 1.char 變量 常量 char c; 定義一個char變量 c = ‘a’ ‘a‘字符常量 char 的本質就是一個整數,只有一個字節大小的整數 2.printf 輸出ch
C語言老司機學Python (二)
append 設計 sta one list 老板 com oob als 標準數據類型: 共6種:Number(數字),String(字符串),List(列表),Tuple(元組),Sets(集合),Dictionary(字典) 本次學習主要是和數據類型混個臉熟,
《面向物件程式設計——C++語言描述》學習筆記(二)
第二章 從C到C++ 2.1main函式 1.C++中需要寫int main()不能只是main() 2.main()函式裡面最後有一個return 0; 3.main()被啟動程式碼呼叫,而啟動程式碼是編譯器新增到程式中的,是程式和作業系統的橋樑。 4.C++中main()中
C語言學習_查詢演算法(二)
3 分塊查詢 演算法思想:將待查的元素均勻的分成塊,塊間按大小順序排序,塊內不排序。 具體的,設待查元素有15 個,將其按關鍵字大小分成3塊,這15個數的排列是一個有序序列,也可以給出無序序列,但也是必須得滿足分在第一塊中的任意元素小於第二塊中的所有數,第二塊中的任意元素
C語言面試題---指標篇(二)
# include <stdio.h># include <stdlib.h># include <string.h>void getMemory( char **p , int num){ *p = malloc(num);} int main() {
Ant-Design元件:Form表單(二)
Ant Design of React @3.10.9 拉取專案 luwei.web.study-ant-design-pro, 切換至 add 分支,可看到 Form 表單實現效果 實現一個新增表單 思路 Create表單:@Form.create() 表單資料繫結 get
C#模擬POST提交表單(二)--HttpWebRequest以及HttpWebResponse
自認為與上次介紹的WebClient最大的不同之處在於HttpWebRequest更靈活,也更強大,比如,HttpWebRequest支援Cookie,而WebClient就不支援,因此,如果要登入某個網站才能進行某些操作的時候,HttpWebResponse就派上用
c語言位元組對齊問題(二)
上一篇已經說了一些基本的struct成員變數的記憶體對齊的問題,現在來進一步看看位域在struct的運用,對減少記憶體的使用很用幫助,特別是在嵌入式領域。廢話不多說了,看下面結構體 struct s { char a:4; int b:8;
C語言的檔案的操作(二)
C語言的檔案的操作(二) 八.資料塊讀寫 #fread 函式是從檔案中讀出資料塊。 int fread(void *buf, int size, int count, FILE *fp); #fwrite函式是向檔案寫入資料塊。 int fwrite(void *buf
c語言:順序表的實現(二 ) 就地逆置,有序合併,大小調整。
#include<iostream> #include<stdio.h> #define LIST_INIT_SIZE 100 using namespace std; struct Node { int *elem; int Len
C語言寫單鏈表的創建、釋放、追加(即總是在最後的位置增加節點)
程序 mage 而不是 自己的 物理 2-66 exit 只為 對數 昨天周末給學妹講了一些指針的知識,本來我對指針就是似懂非懂的狀態,經過昨天一講,我對指針的學習就更深刻了果然給別人講課也是學習的一個方法。加上最近復習數據結構,發現我的博客裏沒有鏈表的博文,
資料結構實現(二):陣列棧(C++版)
資料結構實現(二):陣列棧(C++版) 1. 概念及基本框架 2. 基本操作程式實現 2.1 入棧操作 2.2 出棧操作 2.3 查詢操作 2.4 其他操作 3. 演算法複雜度分析 3.1 入棧
C++:二叉查詢樹實現(二)——遍歷操作
建立好二叉樹,有時候我們需要對整個二叉樹錦星遍歷,即輸出二叉樹的所有結點元素。理論上,遍歷的方式有無數種,順序可以自己任意選定,但是絕大部分遍歷方式在實際中並沒有用處,比較有用的的遍歷方式有兩種:廣度優先遍歷、深度優先遍歷。 (1)廣度優先遍歷
【C語言】單鏈表的實現
單鏈表 單鏈表是一種鏈式存取的資料結構,用一組地址任意的儲存單元存放線性表中的資料元素。 單鏈表結構如下: typedef int DataType; typedef struct Node { struct Node* next; /
資料結構C語言版--單鏈表的基本功能實現
/* * 構造一個鏈式儲存的線性表(當輸入9999時,結束構造過程),然後輸出該線性表 * 並統計該線性連結串列的長度 。 *注:new和delete是C++的運算子 malloc和free是C++/C的標準庫函式 */ #include<st
基於Huffman樹的檔案壓縮原理及C語言實現(二)
在上文基於Huffman樹的檔案壓縮原理及C語言實現(一)中已經介紹並實現瞭如何建立Huffman樹,得到Huffman編碼,這篇我們將會接著說。如何通過Huffman樹,實現檔案壓縮。 實現思路 任何檔案都可以看作是由位元組組成的位元組塊,將位元組看作
C語言線性單鏈表相關函式和演算法的基本實現
備考期間嘗試寫了一些基本資料結構的C語言實現,現做以下記錄(基本資料元以int型為例):全域性定義及依賴:#include <stdio.h> #include <stdlib.h> #define OK 1 #define ERROR 0 #d