1. 程式人生 > >線性表和有序表的合併

線性表和有序表的合併

比如說我們有兩個集合A和B,我們要求一個新的集合A=AUB。比如說A=(1,4,3,11)B=(2,4,3)我們需要把這兩個集合中的元素合併的話,我們就可以選擇一個表為基礎,然後往這個表當中不斷的插入這個表當中沒有的元素。如果在這裡我們採用的是順序儲存結構那麼時間複雜度為O(m*n),如果採取鏈式儲存結構則為O(m+n)。
void MergeList(List &LA,List LB)//將線上性表LB中但不在LA當中的元素插入到LA當中
{
   m=ListLength(LA);//求兩個線性表的長度
   n=ListLength(LB);
   for(i=1;i<=n;i++)
   {
       GetElem(LB,i,e);//在LB當中取第i個元素給e
       if(!LocateElem(LA,e))//如果LA當中不存在和e相同的元素
        ListInsert(LA,++m,e);//把e插在LA的後面
   }
}
有序表的合併:資料元素線上性表當中依值非遞減或非遞增的有序排列,稱該線性表為有序表。比如說A=(3,5,8)B=(2,6,8,9)我們需要得到的C=(2,3,5,6,8,8,9)。因為這是有序的元素儲存所以我們不論儲存結構和順序儲存結構還是鏈式儲存結構時間複雜度都是O(m+n)。如果是順序有序表的合併我們就要建立一個長度為m+n的空表。然後不斷的讓LA當中的元素和LB當中的元素比較。然後再就行插入。
void MergeList_Sq(SqList LA,SqList LB,SqList &LC)//LA,LB是遞增排序的
{
    LC.length=LA.length+LB.length;//新表的長度為兩個表的長度之和
    LC.elem=new ElemType[LC.length];//分配空間
    pc=LC.elem;//分別指向第一個元素
    pa=LA.elem;
    pb=LB.elem;
    pa_last=LA.elem+LA.length-1;//指向最後一個元素
    pb_last=LB.elem+LB.length-1;
    while((pa<=pa_last)&&(pb<=pb.last))
    {
        if(*pa<=*pb)
            *pc++=*pa++;//就行比較然後就行賦值
        else
            *pc++=*pb++;
    }
    while(pa<=pa_last)
        *pc++=*pa++;//把剩下的逐一插入
    while(pb<=pb_last)
        *pc++=*pb++;
}
如果我們選擇的是鏈式有序表的話其實我們可以不需要再去分配空間,只需要將原來的兩個連結串列中結點之間的關係解除那就可以了。
void MergeList_Sq(List &LA,List &LB,List &LC)//LA,LB是遞增排序的
{
     pa=LA->next;//把LA和LB的值給合併了
     pb=LB->next;
     LC=LA;//LA的頭結點作為LC的頭結點
     pc=LC;//pc的初值指向了LC的頭結點
     while(pa&&pb)
     {
         if(pa->data<=pb->data)
         {
             pc->data=pa;//pa的值比pb小的話,我們就把pa的值先插入到LC當中
             pc=pa;
             pa=pa->next;
         }
         else
         {
             pc->next=pb;//pb的值比pa小,那我們把pb插入到LC當中
             pc=pb;
             pb=pb->next;
         }
     }
     pc->next=pa?pa:pb;//哪個為空,哪個繼續插入
}

相關推薦

線性有序合併

比如說我們有兩個集合A和B,我們要求一個新的集合A=AUB。比如說A=(1,4,3,11)B=(2,4,3)我們需要把這兩個集合中的元素合併的話,我們就可以選擇一個表為基礎,然後往這個表當中不斷的插入

8.可變物件(無序有序——含java庫中應用)

在下列引用中,在chris 修改last的值後,list中的值也改變。因為list和chris引用的是同一個物件。 所以chris客戶可以修改它植入list中的物件。這是一個便利的方案。 但修改ADT中可變物件的能力,使客戶有可能破壞ADT的完整性。

線性

結構 n) thead 復雜度 函數 讀取 col 相等 cpp 原文出自:http://www.cppblog.com/cxiaojia/archive/2012/07/31/185760.html 談到鏈表之前,先說一下線性表。線性表是最基本、最簡單、也是最常用的一種數

陣列、連結串列、堆疊佇列、線性順序

線性表是具有n個(資料元素)的有限序列(n>0) 資料:資訊的載體,能夠被計算機識別、儲存、加工,包括整數、實數、字串、影象、聲音等 資料元素:資料的基本單位,也稱結點、元素、頂點(圖)、記錄。一個數據元素可由若干個資料項組成,比如線性表中每個資料元素由姓名、

試分別以順序單鏈作儲存結構,各寫一實現線性就地逆置的演算法

對陣列的倒置void SeqList<DataType>::inversion() { int i = 0, j = length - 1; DataType temp;

線性基礎】順序單鏈的插入、刪除等基本操作【Java版】

本文表述了線性表及其基本操作的程式碼【Java實現】 參考書籍 :《資料結構 ——Java語言描述》/劉小晶 ,杜選主編 線性表需要的基本功能有:動態地增長或收縮;對線性表的任何資料元素進行訪問和查詢;線上性表中的任何位置進行資料元素的插入和刪除操作;求線性表中指定資料元素的前驅和後繼等等。 首先描述線性表的

MSSQL 臨時公用使用案例

pan -s span cnblogs div count state insert pda 1、臨時表: 1.1)實例1 if(OBJECT_ID(‘tempdb..#a‘) IS NOT NULL) drop table #a; if(OBJECT_ID(‘t

普通集合泛型集合的區別,哈希字典的區別,隊列堆棧的區別以及堆棧的區別。

ear 釋放內存 main 廣泛 棧內存 節點 except {0} 常數 普通集合和泛型集合的區別: 泛型集合與傳統集合相比 類型更安全. 泛型集合無需裝箱拆箱操作. 泛型的重要性. 泛型是未來五年的主流技術 ...通常情況下,建議您使用泛型集合,因為這樣可以獲得類型安全

SQL觸發器中的inserteddeleted

plain add log and 處理 highlight del 兩個 from 簡介:開發也有年頭了,但是觸發器確實用的比較少,但是無容置疑觸發器確實不錯, 最近項目要求需要用到的觸發器特別多、頻繁,覺得很有必要記錄和積累下。

MySQL中橫相互轉換

order by png image mar 插入數據 group src then images 一 豎表轉橫表 1. 首先創建豎表 create table student (   id varchar(32) primary key,   name varchar

順序的優缺點及使用場景

sla rtl logs info dvd www. www html phy 54nksi藤興痘苑挖慕http://t.docin.com/mfcd951rfnjeo址人仙棺攣刻http://weibo.com/u/618911099514181s苛吩纖憾勒俸http:/

透視交叉

根據 參數 tle 均值 數據分析 log 缺失值 聚合 lsp import numpy as np import pandas as pd from pandas import Series,DataFrame

【數據結構】順序

頭刪 enc 遍歷 情況 ear count 數據 表的基本操作 直接 一、順序表 順序表定義 :順序表是在計算機內存中以數組的形式保存的線性表,線性表的順序存儲是指用一組地址連續的存儲單元依次存儲線性表中的各個元素、使得線性表中在邏輯結構上相鄰的數據元素存儲在相鄰的物理存

FreeRTOS數據結構(一)--鏈

set 開關 部分 添加 use XP prev inf ext 結構體定義 /*鏈表結構體*/ typedef struct xLIST { listFIRST_LIST_INTEGRITY_CHECK_VALUE /*用於鏈表完整性檢查*/ confi

PE文件格式中導入ITA總結20180508

med 只有一個 文件 term 說明 def 文件中 內容 nal PE文件中重要的表有:1.導出表,2.導入表,3.IAT表,4.重定位表,5.資源表導入表的結構體: typedef struct _IMAGE_IMPORT_DESCRIPTOR { union {

九、順序單鏈的對比分析

opera 基礎數據類型 insert 是我 public 位置 參數 amp 一次 1、如何判斷某個數據元素是否存在於線性表中? find()操作: 可以為線性表List增加一個查找操作 int find(const T& e)const; 參數:待查找的數據

的數組實現中,令鏈自由變得緊湊《算法導論》10.3-5

bject and elements 多少 lse tex com spa 使用 有一個雙向鏈表L,存儲於長度為m的數組。假設m個元素中有n個元素在鏈表L中,m-n個元素由自由表F管理。現在實現方法CompacifyList,它的功能是讓鏈表L中元素緊湊地占據數組的前n個

數據倉庫--事實維度

需要 解釋 參考 gid 新的 www 多次 主外鍵 color 本文主要參考如下幾篇文章:http://www.cnblogs.com/47613593/archive/2009/02/20/1394581.htmlhttp://jackwxh.blog.51cto.co

順序的一些區別

truct 包含 實際應用 線性表 eof 鏈接 下一個 為什麽 mage 順序表與鏈表是非常基本的數據結構,它們可以被統稱為線性表。 線性表(Linear List)是由 n(n≥0)個數據元素(結點)a[0],a[1],a[2]…,a[n-1] 組成的有限序列。 順序表

JavaWeb_day8_MySQL單

1.關閉和啟動mysql 在命令列視窗輸入:net   start   mysql(啟動mysql)