1. 程式人生 > >歸併具體實現(二)--鏈式表示

歸併具體實現(二)--鏈式表示

線性表的鏈式表示:

typedef struct LNode {
	ElemType data;
	struct LNode *nxt;
}LNode,*LinkList;

建立連結串列:

void createList(LinkList &L,int n){
	L = (LinkList)malloc(sizeof(LNode));
	L->nxt = NULL;
	for (int i = 0; i < n; i++){
		LinkList p = (LinkList)malloc(sizeof(LNode));
		scanf_s("%d",&p->data);
		p->nxt = L->nxt;
		L->nxt = p;
	}
}
實際,我覺得這塊不加&也行,只不過呼叫前需將所要建立的節點進行初始化。

我的理解,一般而言,加一個&,就相當於引用一般,這函式裡改變後其他函式也會相應改變。

歸併:

void mergeList(LinkList& La, LinkList& Lb, LinkList & Lc){
	LinkList p = La->nxt;
	LinkList q = Lb->nxt;
	Lc = La;
	LinkList m = Lc;
	while (p&&q){
		if (p->data<=q->data)
		{
			m->nxt = p;
			m = p;
			p = p->nxt;
		}
		else
		{
			m->nxt = q;
			m = q;
			q = q->nxt;
		}
	}
	m->nxt = p ? p : q;
	free(Lb);
}

這裡面,在mergeList函式裡引數裡使用的是&La,&LB,則此函式中free(Lb),也相當於對所對應主函式裡的引數進行釋放空間了,然而,嘗試了去掉其中的&即mergeList(La,Lb,&Lc),依然能對所對應主函式裡的引數進行釋放空間,這是怎麼一回事???如果有大神無意看到了,還望解答。 總程式:
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode {
	ElemType data;
	struct LNode *nxt;
}LNode,*LinkList;
void createList(LinkList &L,int n){
	L = (LinkList)malloc(sizeof(LNode));
	L->nxt = NULL;
	for (int i = 0; i < n; i++){
		LinkList p = (LinkList)malloc(sizeof(LNode));
		scanf_s("%d",&p->data);
		p->nxt = L->nxt;
		L->nxt = p;
	}
}
void mergeList(LinkList& La, LinkList& Lb, LinkList & Lc){
	LinkList p = La->nxt;
	LinkList q = Lb->nxt;
	Lc = La;
	LinkList m = Lc;
	while (p&&q){
		if (p->data<=q->data)
		{
			m->nxt = p;
			m = p;
			p = p->nxt;
		}
		else
		{
			m->nxt = q;
			m = q;
			q = q->nxt;
		}
	}
	m->nxt = p ? p : q;
	free(Lb);
}
int main(){
	LinkList La,Lb;
	createList(La, 4);
	createList(Lb, 7);
	LinkList Lc;
	mergeList(La, Lb, Lc);
	return 0;
}
其中,資料形成的節點是依次插入到表頭的,故,輸入應該為按非遞增的順序,或將建立連結串列的程式改為插入表尾的


相關推薦

歸併具體實現--表示

線性表的鏈式表示:typedef struct LNode { ElemType data; struct LNode *nxt; }LNode,*LinkList;建立連結串列: void cr

Flume抽取SQL Server設計方案具體實現觸發器

上一篇將瞭如何使用Flume收集SQL server Board中的新增資料進行處理,如下針對更新的資料進行分析需求:對Board表更新的資料進行處理1.建立一個存更新資料的表Tri_Board_Update,表結構基本和原表機構一樣,但需要新增Update_id(唯一標識列

Hadoop網盤具體實現

Hadoop 環境搭好之後,我嘗試了實現一個 Hadoop 網盤的小專案,使用 Java 的 api,你也可以選擇其他的。經過修改,網盤頁面具體的效果如下。 實現了檔案的上傳,下載,刪除,使用者登入到自己的資料夾進行簡易的檔案管理。 一、這裡我的前期準備

Java常用的八種排序演算法與程式碼實現歸併排序法、快速排序法

注:這裡給出的程式碼方案都是通過遞迴完成的 --- 歸併排序(Merge Sort):   分而治之,遞迴實現   如果需要排序一個數組,我們先把陣列從中間分成前後兩部分,然後對前後兩部分進行分別排序,再將排好序的數組合並在一起,這樣整個陣列就有序了   歸併排序是穩定的排序演算法,時間

Html靜態網頁的實現——之傻瓜教程

上次說到Html5中無法換行的問題 <body> <p>把文字輸入到這裡</p> <p>把文字輸入到這裡</p> </body> 看看執行結果 這下是不是就換行了   格式:<p a

佇列的物理實現順序佇列+佇列

說明 基於順序表實現的順序佇列 基於連結串列實現的鏈式佇列 一、說明 本文基於順序表實現的順序佇列中,陣列的大小為n+1,但只儲存n個元素,方便區分滿佇列和空佇列;基於連結串列實現的鏈式佇列中,front始終指向頭結點(資料域為空),rear指向佇列的尾結點(資料域不為

棧的物理實現順序棧+

說明 基於順序表實現的順序棧 基於連結串列實現的鏈式棧 一、說明: 本文中基於順序表實現的順序棧中top指的是棧中第一個空閒位置,基於連結串列實現的鏈式棧中top指向鏈式棧中第一個結點(棧頂)的指標,無頭結點。 二、基於順序表實現的順序棧 Stack.h #inc

C語言:單鏈表實現 就地逆置,就地歸併

#include<iostream> #include<stdio.h> #include<math.h> #define LEN sizeof(struct Nodelist) using namespace std; typedef

STL之set具體解釋

基本操作 二叉樹 mono itl 自己 pair leading 左右子樹 ews 首先來看看set集合容器: set集合容器實現了紅黑樹的平衡二叉樹數據結構。在插入元素時它會自己主動調整二叉樹的排列,把該元素放到適當的位置,而且 保證左右子樹平衡。平衡二

Dji Mobile SDK 基礎實現

stat one 透傳 pub != exceptio rom tick ann Dji Mobile SDK 基礎實現(二) 本文簡要介紹如何通過調用DJI Mobile SDK,實現獲取和釋放無人機的控制權限、模擬遙控器按鈕控制無人機的飛行、獲取無人機的回傳視頻、獲取

Service具體解釋:Service生命周期

art views parent con 周期 使用 down append ini 《 Service具體解釋(一):什麽是Service》 《 Service具體解釋(二):Service生命周期》 《Service具體解釋(三):Service

redis 數據結構基礎

ear 數據結構 dup 設計 pty ndt 萬能 div 語言 redis中的鏈表恐怕是最簡單的數據結構了,redis鏈表中總共有3個數據結構: listNode: 1 typedef struct listNode { 2 struct listNode *

實現自定義查詢的數據庫設計及實現

表名 table abr bigint sts 處理 update 關聯表 creat 上部分大概講了一下表設計,這部分講一下處理。 處理的結構 處理結構的內容比較多,分為幾個部分分別講解一下。首先講解一下尋找關系表。 尋找關系表 尋找關系表根據“表間關系登記表”進行處

數據結構

形式 時間 資源 結構 實現 線性 插入 一個數 簡單 一、表的常見操作 對於一個鏈表,某個元素有其前驅和後繼。對表的操作:find返回關鍵字首次出現的位置;insert和delete插入和刪除某個元素;findkth返回某個位置上的元素;二、表的簡單數組實現 定

KVM虛擬化的四種簡單網絡模型介紹及實現

str drive 51cto -c water -a return dfa 模型 接上篇,介紹NAT網絡模型和橋接模型。 三、NAT模型 NAT模型其實就是SNAT的實現,路由中虛擬機能將報文發送給外部主機,但是外部主機因找不到通往虛擬機的路由因而無法回應請求。但是外部

SpringBoot在Kotlin中的實現

文件中 open 代碼 rabl delete ons list any data 根據現在的開發模式和網上的一些資料,SpringBoot需要對業務和操作進行分層,通常分為controller、entity、service、respository等結構。下面以Kotlin

【原始碼剖析】tornado-memcached-sessions —— Tornado session 支援的實現

     客官您終於回頭了!讓我們本著探(zuo)索(si)精神把 session.py 看完吧...       首先看看需要的庫:       pickle 一個用於序列化反序列化的庫(聽

資料結構實現:陣列棧C++版

資料結構實現(二):陣列棧(C++版) 1. 概念及基本框架 2. 基本操作程式實現 2.1 入棧操作 2.2 出棧操作 2.3 查詢操作 2.4 其他操作 3. 演算法複雜度分析 3.1 入棧

基於IE核心的多媒體檔案視覺化程式實現

文章目錄 使用命令列引數 命令列引數獲取和解析程式碼 幫助系統 執行測試 WSEE的功能還不只如此 現在的結果 上回說道,我們需要使用命令列引數方法將要瀏覽的檔名傳入wsee.exe 程式,然後由

中小型園區網路的設計與實現

寫論文第二天 想要用心去寫一篇論文,首先要讀懂論文的要求   根據論文指導找出詳細的思路(論文的基本要求) 思路:①中小型區域網,500-1000臺計算機組成的一個網路。 ②網路型別是“園區網”,包括企業網、校園網等多種形式。園區網有一定的地理分佈範圍,不要簡單的一個辦