1. 程式人生 > >[資料結構]單鏈表 合併兩個非遞減有序表成新表也是非遞減表

[資料結構]單鏈表 合併兩個非遞減有序表成新表也是非遞減表

題目一:已知線性表LA和LB中的資料元素按值非遞減有序排列,現要求將LA和LB歸併為一個新的線性表LA且LA的元素依然按值非遞減有序排列。LA=(3,5,8,11,24) LB=(2,6,8,9,11,20)

要求1:(1)線性表用陣列表示。
(2)不借助多餘的儲存空間。

要求2:(1)線性表使用單鏈表。

// data_structure_01.cpp : 定義控制檯應用程式的入口點。
//

#include "stdafx.h"
#include <stdlib.h>
#define M 5
#define N 6
typedef struct node
{
	int data;
	struct node *next;
}LinkNode, *LinkList;
LinkList Creat(int *arr, int n)
{
	int i;
	LinkList p = NULL;
	LinkList q = NULL;
	LinkList head = NULL;
	head = (LinkList) malloc (sizeof(LinkNode));
	head->next = NULL;
	q = head;
	for (i=0; i<n;i++) {
		p = (LinkList) malloc (sizeof(LinkNode));
			p->next = NULL;
		p->data = arr[i];
		q->next = p;
		q = p;
	}
	return head;
}
void Merger(LinkList LA, LinkList LB)
{
	LinkList p1 = LA->next;
	LinkList p2 = LB->next;
	LinkList p3 = NULL;
	LinkList tmp = NULL;
	p3 = LA;
	free(LB);
	while ((NULL != p1) && (NULL != p2))
	{
		if (p1->data <= p2->data)
		{
			p3 = p1;
			p1 = p1->next;
		}
		else
		{
			tmp = p2->next;
			p2->next = p1;
			p3->next = p2;
			p3 = p2;
			p2 = tmp;
		}
	}
	if (NULL == p1)
	{
		p3->next = p2;
	}
	else
	{
		p3->next = p1;
	}
}
void Output(LinkList head)
{
	LinkList p = head->next;
	while (NULL != p)
	{
		printf("%d ", p->data);
		p = p->next;
	}
	printf("\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
	int arrOne[M] = {3, 5, 8, 11, 24};
	int arrTwo[N] = {2, 6, 8, 9, 11, 20};
	LinkList LA = NULL;
	LinkList LB = NULL;
	LA = Creat(arrOne, M);
	LB = Creat(arrTwo, N);
	Merger(LA, LB);
	Output(LA);
	getchar();
	return 0;

}


相關推薦

資料結構演算法題/合併排好序的單鏈

原題   Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.&nbs

資料結構】【合併有序連結串列】

#include<stdio.h> #include<string.h> #include<stdlib.h> const int maxn = 1e5 + 5; struct node { int num; struct node *next; }; s

資料結構演算法題/合併有序陣列

給定兩個有序整數陣列 nums1 和 nums2,將 nums2 合併到 nums1 中,使得 num1 成為一個有序陣列。 說明: 初始化 nums1 和 nums2&n

[資料結構]單鏈 合併遞減有序是非遞減

題目一:已知線性表LA和LB中的資料元素按值非遞減有序排列,現要求將LA和LB歸併為一個新的線性表LA且LA的元素依然按值非遞減有序排列。LA=(3,5,8,11,24) LB=(2,6,8,9,11,20)要求1:(1)線性表用陣列表示。 (2)不借助多餘的儲存空間。 要

資料結構實驗之實現複數的四則運算

1.實驗目的 瞭解並掌握用c語言來編寫資料結構源程式的方法。 2.需求分析 首先建立一個複數,然後根據提示使用者輸入兩個複數,使得能同時進行兩個複數的加、減、乘、除運算。       輸入形式和輸入值的範圍:分別輸入兩個複數,其格式為:a+bi用enter結束輸入。    

學習資料結構和演算法的利器|良心推薦

資料結構和演算法的重要性想必各位在江湖上早就有所耳聞。它對我們最直接的影響就是面試,一般來說,程式設計師一面都會涉及資料結構和演算法知識,尤其是當前找工作比較難的情況下,各個公司會更加重視對候選人基本能力的考察。另外的影響是工作,以我為例,最開始在一家小公司做大資料的時候,由於資料量較大而計算資源不足,所以需

合併整型有序陣列為一個有序陣列(演算法)

面試中,經常會問到演算法問題,比如如何合併兩個有序的整型有序陣列,使之變成一個有序陣列。 我的程式碼如下: 1 package com.company.algorithm; 2 3 import java.util.Arrays; 4 5 /** 6 * 合併兩個有序陣列 7

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

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

隨筆-合併有序單鏈(遞迴/遞迴)

題目:合併兩個有序單鏈表 遞迴: /* public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } }*

遞減合併有序單鏈

#include <iostream> #include <cstdio> #include <stdlib.h>//malloc函式標頭檔案 using namespace std; typedef struct Node {

【學習點滴-資料結構-單鏈】交換單鏈中任意元素

/* * 演算法功能:建立單鏈表,交換單鏈表中的兩個元素。 * 演算法中的單鏈表是帶頭結點的。 * 函式說明:nop * @author:xiaoq-ohmygirl * @time :2012-06-20 **/ #include <stdio.h>

遞增的有序連結串列合併為一個遞增的有序連結串列。要求結果連結串列扔使用原來連結串列的儲存空間,不另外佔用其他的儲存空間。中不允許有重複的資料

語言:C++ #include <iostream> using namespace std; typedef struct LNode { int data; LNode *next; }LNode,*LinkList; //建立連結串列 int CreateList(Li

合併單鏈(連結串列方式)

假設頭指標為La、Lb單鏈表分別為線性表LA、LB的儲存結構,現在要合併La、Lb得到單鏈表Lc void MergeList_L(LinkList La, LinkList Lb, LinkList Lc){ //已知La、Lb的元素按值非遞減排列 //歸併La、Lb得到單鏈表Lc,

合併有序單鏈合併後依然有序

分析過程:  首先我要合併有序的連結串列,合併後依然有序。我就要有兩個指標,分別指向兩個連結串列,觀察所給的兩個連結串列是升序還是降序的來確定合併後的連結串列是否有序。(這裡預設的認為連結串列時升序的)  用指標分別指向兩個連結串列的第一個節點,比較大小,那個大,將元素尾插進入我所要返

資料結構與演算法解題:合併有序連結串列

資料結構和演算法,是程式設計的基礎,想要提高程式設計能力,這是繞不開的坎,為了練習演算法,在Codewars和LeetCode上刷了一些難度級別為easy的題,程式碼都儲存成py檔案了,時間久了,積累的多了,有些亂,接下了打算逐步把它們搬到部落格上來,整理一下,便於查詢複習。廢話少說,開

【LeetCode-面試演算法經典-Java實現】【021-Merge Two Sorted Lists(合併排好序的單鏈)】

原題   Merge two sorted linked lists and return it as a new list. The new list should be made

【021-Merge Two Sorted Lists(合併排好序的單鏈)】

原題  Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two

合併有序單鏈(Java)

思想: 準備兩個連結串列l1和l2: 判斷是否有連結串列為空:如果l1為空,則不用比較直接返回l2,如果l1為空,則直接返回l2; 比較l1和l2節點,選出最小的那個節點,將該節點設為合併後的連結

資料結構與演算法(二)合併有序連結串列

附上部落格連結,歡迎大家前來交流學習 本系列的第一節概括性地簡單介紹了一下資料結構和演算法的概念,說實話有點虛,因為誰都知道連結串列和陣列是什麼,也都能說出雜湊和二叉樹,但真正有難度的是,在實際開發中如何去用這些資料結構,根據不同的開發需求選擇不同的資料結構和

Java單鏈基本操作(八)--合併有序單鏈

package listnode; /** * @author Gavenyeah * @date Start_Time:2016年4月1日 下午15:01:47 * @date End_Ti