1. 程式人生 > >02-線性結構1 兩個有序連結串列序列的合併【連結串列】

02-線性結構1 兩個有序連結串列序列的合併【連結串列】

題意:將倆個遞增連結串列合併成非遞減連結串列,注意提交程式碼時只需提交合並函式!

思路:就是最基本的連結串列操作。。。

程式碼:

#include <stdio.h>
#include <stdlib.h>

typedef int ElementType;
typedef struct Node* PtrToNode;
struct Node {
    ElementType Data;
    PtrToNode   Next;
};

typedef PtrToNode List;

List Read(); /* 細節在此不表 */
void Print( List L ); /* 細節在此不表;空連結串列將輸出NULL */

List Merge( List L1, List L2 );

int main()
{
    List L1, L2, L;
    L1 = Read();
    L2 = Read();
    L = Merge(L1, L2);
    Print(L);
    Print(L1);
    Print(L2);
    return 0;
}
List Read()
{
    int n,i,fig;
    List Head,r,s;
    Head = (List)malloc(sizeof(List));
    r = Head;
    //Head = r;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&fig);
        s = (List)malloc(sizeof(List));
        s->Data = fig;
        r->Next = s;
        r = s;
    }
    r->Next = NULL;
    return Head;
}
void Print( List L )
{
    List t = NULL;
    t = (List)malloc(sizeof(List));

    L = L->Next;
    if(L == NULL) {printf("NULL\n");return;}
    while(L != NULL){
        printf("%d ",L->Data);
        L = L->Next;
    }printf("\n");
    L = t;
}
List Merge( List L1, List L2 )
{
    List L,p,t,tL1,tL2;
    L = (List)malloc(sizeof(List));
    p = L;
    tL1 = L1->Next;tL2 = L2->Next;
    while(tL1 != NULL || tL2 != NULL){
        t = (List)malloc(sizeof(List));
        if(tL2 == NULL || tL1 != NULL && tL1->Data <= tL2->Data){
            t->Data = tL1->Data;
            p ->Next = t;
            p = t;
            tL1 = tL1->Next;
        }
        else{
            t->Data = tL2->Data;
            p->Next = t;
            p = t;
            tL2 = tL2->Next;
        }
    }
    p->Next = NULL;
    L1->Next = NULL;//將連結串列頭結點斷開
    L2->Next = NULL;
    return L;
}



相關推薦

02-線性結構1 有序鏈表序列的合並

輸入 stdlib.h 細節 結點 類型 兩個 node 指針 color 02-線性結構1 兩個有序鏈表序列的合並(15 分) 本題要求實現一個函數,將兩個鏈表表示的遞增整數序列合並為一個非遞減的整數序列。 函數接口定義: List Merge( List L1,

[資料結構]02-線性結構1 有序連結串列序列合併

本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。 函式介面定義: List Merge( List L1, List L2 ); 其中List結構定義如下: typedef struct Node *PtrToNode; struct Nod

MOOC陳越資料結構第二週02-線性結構1 有序連結串列序列合併 (15 分)

首先讀題,題目中說L1,L2都為含頭節點的,第一次做的時候沒有認真讀題以為不帶頭節點,傳出的連結串列也要求帶頭節點。 程式碼 List Merge(List L1,List L2){ List pa,pb,pc,L; L = (List)malloc(si

PTA 02-線性結構1 有序連結串列序列合併 (15 分)

本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。 函式介面定義: List Merge( List L1, List L2 ); 其中List結構定義如下: typedef struct Node *PtrToNode; struc

mooc浙大資料結構02-線性結構1 有序連結串列序列合併

題目:02-線性結構1 兩個有序連結串列序列的合併(15 分)本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。函式介面定義:List Merge( List L1, List L2 ); 其中List結構定義如下:typedef struct

02-線性結構1 有序連結串列序列合併連結串列

題意:將倆個遞增連結串列合併成非遞減連結串列,注意提交程式碼時只需提交合並函式! 思路:就是最基本的連結串列操作。。。 程式碼: #include <stdio.h> #include

02-線性結構1 有序連結串列序列合併 (15分)

本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個遞增的整數序列。 函式介面定義: List Merge( List L1, List L2 ); 其中List結構定義如下: typedef struct Node *PtrToNode; struct Nod

PTA-線性結構1 有序連結串列序列合併

本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。 函式介面定義: List Merge( List L1, List L2 ); 其中List結構定義如下: typedef struct Node *PtrToNode;

資料結構-線性表- 01 “有序連結串列序列合併” 問題

題目要求: 本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。 函式介面定義: List Merge( List L1, List L2 ); 其中List結構定義如下: typedef struct Node *PtrToNode; struc

6-1 有序連結串列序列合併 (15 分)

本題要求實現一個函式,將兩個連結串列表示的遞增整數序列合併為一個非遞減的整數序列。 函式介面定義: List Merge( List L1, List L2 ); 其中List結構定義如下: typedef struct Node PtrToNode; struct Node

c語言資料結構有序連結串列合併為一個新連結串列

先建立兩個連結串列La和Lb,並向La Lb中輸入值,然後再建立一個Lc,Lc指向La,具體程式碼如下: #include "stdafx.h" #include"stdio.h" #include"stdlib.h" #define OK 1 #define OVERFL

資料結構——將有序連結串列併為一個有序連結串列演算法

//將兩個有序連結串列併為一個有序連結串列演算法,該程式也可以cFree環境執行。// c1.h (程式名) #include<string.h> #include<ctype.h> #include<malloc.h> // mallo

習題2.5 有序鏈表序列的合並(15 分)浙大版《數據結構(第2版)》題目集

merge 其中 接口 cnblogs oid color 給定 style bsp 本題要求實現一個函數,將兩個鏈表表示的遞增整數序列合並為一個非遞減的整數序列。 函數接口定義: List Merge( List L1, List L2 ); 其中Lis

7-1 有序序列的中位數 (25 分)

已知有兩個等長的非降序序列S1, S2, 設計函式求S1與S2並集的中位數。有序序列A​0​​,A​1​​,⋯,A​N−1​​的中位數指A​(N−1)/2​​的值,即第⌊(N+1)/2⌋個數(A​0​​為第1個數)。 輸入格式: 輸入分三行。第一行給出序列的公共長度N(0<N≤10

死磕演算法之1刷Leetcode——找出有序陣列的中位數Median of Two Sorted ArraysO(log(m+n))

Median of Two Sorted Arrays 題目難度:hard 題目要求: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two s

資料結構有序順序表合成一個有序順序表

題目:      有順序表A和B,其元素均按從小到大的升序排列,編寫一個演算法,將它們合併成一個順序表C,要求C的元素也按從小到大的升序排列 程式碼: #include<stdio.h> #define MAX 100 typedef int datatyp

7-1 有序序列的中位數(25 分)

已知有兩個等長的非降序序列S1, S2, 設計函式求S1與S2並集的中位數。有序序列A​0​​ ,A1,⋯,A​N−1的中位數指A​(N−1)/2的值,即第⌊(N+1)/2⌋個數(A​0為第1個數)。 輸入格式: 輸入分三行。第一行給出序列的公共長度N(0

資料結構_有序單鏈表歸併C語言原始碼

#include<stdio.h> #include<stdlib.h> typedef struct LNode {   int data;   struct LNode *next;; }LNode;      void InitList(LNode *&L) {    

7-15 有序鏈表序列的合並(20 分)

一行 htm text all color div 兩個 turn nbsp 已知兩個非降序鏈表序列S1與S2,設計函數構造出S1與S2的並集新非降序鏈表S3。 輸入格式: 輸入分兩行,分別在每行給出由若幹個正整數構成的非降序序列,用−1表示序列的結

有序鏈表序列的合並

ret nbsp str 是否 並集 link 表示 平時 math 7-51 兩個有序鏈表序列的合並(20 分) 已知兩個非降序鏈表序列S1與S2,設計函數構造出S1與S2的並集新非降序鏈表S3。 輸入格式: 輸入分兩行,分別在每行給出由若幹個正整數構成的非降序序列