最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)線性表有序表的合并方式(順序表實(shí)現(xiàn)and鏈表實(shí)現(xiàn))

 更新時(shí)間:2024年04月23日 11:06:59   作者:Daydreamer_cl  
這篇文章主要介紹了C++實(shí)現(xiàn)線性表有序表的合并方式(順序表實(shí)現(xiàn)and鏈表實(shí)現(xiàn)),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

有序表的合并:

  • 已知線性表La和Lb中的元素按值非遞減有序排列
  • 現(xiàn)要求將La和Lb歸并為一個(gè)新的線性表Lc
  • 且Lc中的數(shù)據(jù)元素仍按值非遞減有序排列

一、順序表實(shí)現(xiàn)

#include<iostream>
using namespace std;
#define MAXSIZE 100 //定義最大存儲(chǔ)空間
 
//順序表的定義
struct SqList
{
	int* Elme; //動(dòng)態(tài)數(shù)組
	int Length; //元素個(gè)數(shù)
 
};
 
//初始化
bool initList_Sq(SqList& L)
{
	L.Elme = new int[MAXSIZE]; //為順序表分配空間
	if (!L.Elme)
	{
		exit(0); //分配失敗退出系統(tǒng)
	}
	L.Length = 0; //空表長度為0
	return true; //分配成功返回1
}
 
//插入
bool Listinsert_Sq(SqList& L, int i, int e)
{
	if (i < 1 || i > L.Length + 1) //判斷輸入的i釋放合法
	{
		return false;
	}
 
	if (L.Length == MAXSIZE) //判斷空間是否已滿
	{
		return false;
	}
 
	for (int j = L.Length - 1; j >= i - 1; j--)
	{
		L.Elme[j + 1] = L.Elme[j]; //將插入位置及之后的元素后移
	}
	L.Elme[i - 1] = e; //將元素e放入位置i
	L.Length++; //表長加一
	return true;
 
}
 
//遍歷
void ListPrint_Sq(SqList L)
{
	for (int j = 0; j < L.Length; j++)
	{
		cout << L.Elme[j] << " ";
	}
	cout << endl;
}
 
//線性表有序表的合并
void MergeList_Sq(SqList La, SqList Lb, SqList& Lc)
{
	//指針pa,pb,pc的初值分別指向兩個(gè)表的第一個(gè)元素
	int* pa = La.Elme;  
	int* pb = Lb.Elme;
	Lc.Length = La.Length + Lb.Length; //新表長度等于兩表之和
	Lc.Elme = new int[Lc.Length]; //為新表分配存儲(chǔ)空間
	int* pc = Lc.Elme; 
	//pa_last、pb_last分別指向表中最后一個(gè)元素
	int *pa_last = &La.Elme[La.Length - 1];
	int* pb_last = &Lb.Elme[Lb.Length - 1];
 
	//判斷兩表是否為空,或當(dāng)其中一表摘取完,則停止循環(huán)
	while (pa <= pa_last && pb <= pb_last) 
	{
		if (*pa <= *pb) //依次摘取兩表中值較小的結(jié)點(diǎn)
		{
			*pc++ = *pa++;
		}
		else
		{
			*pc++ = *pb++;
		}
	}
 
	//如果條件為真,表明Lb表已經(jīng)到達(dá)表尾,將La中剩余元素加入Lc
	while (pa <= pa_last)
	{
		*pc++ = *pa++;
	}
 
	//如果條件為真,表明La表已經(jīng)到達(dá)表尾,將Lb中剩余元素加入Lc
	while (pb <= pb_last)
	{
		*pc++ = *pb++;
	}
 
}
 
int main()
{
	SqList La; //創(chuàng)建線性表La
	initList_Sq(La); //初始化
	//創(chuàng)建數(shù)組并把數(shù)組中元素插入到La中
	int arr1[3] = { 1,7,8 }; 
	for (int i = 1; i <= 3; i++)
	{
		Listinsert_Sq(La, i, arr1[i - 1]);
	}
	cout << "合并前La中元素:" << endl;
	ListPrint_Sq(La); //遍歷La
 
	SqList Lb;//創(chuàng)建線性表Lb
	initList_Sq(Lb); //初始化
	//創(chuàng)建數(shù)組并把數(shù)組中元素插入到Lb中
	int arr2[6] = { 2,4,6,8,10,11 };
	for (int i = 1; i <= 6; i++)
	{
		Listinsert_Sq(Lb, i, arr2[i - 1]);
	}
	cout << "合并前Lb中元素:" << endl;
	ListPrint_Sq(Lb); //遍歷La
 
	SqList Lc;
	MergeList_Sq(La, Lb, Lc); //合并La、Lb到Lc中
	cout << "合并后Lc中元素:" << endl;
	ListPrint_Sq(Lc); //遍歷Lc
 
 
	system("pause");
	return 0;
}

二、鏈表表實(shí)現(xiàn)

#include<iostream>
using namespace std;
 
 
//結(jié)點(diǎn)
struct Lnode
{
	int Data; //數(shù)據(jù)域
	Lnode* Next; //指針域
};
 
typedef Lnode* LinkList; //將LinkList定義為Lnode*類型
 
//初始化
void Listinit_L(LinkList& L)
{
	L = new Lnode;
	L->Next = NULL;
}
 
//插入
bool Listinsert_L(LinkList& L, int i, int e)
{
	Lnode* p = L;
	int j = 0;
	while (p && j < i - 1) //利用循環(huán)找到i-1的結(jié)點(diǎn)
	{
		p = p->Next;
		++j;
	}
 
	if (!(p) || j > i - 1)//判斷輸入的i是否合法
	{
		return false;
	}
	else
	{
		Lnode* s = new Lnode; //創(chuàng)建新結(jié)點(diǎn)s
		s->Data = e; //將輸入的元素e存入s的數(shù)據(jù)域
		s->Next = p->Next; //s指向第i個(gè)結(jié)點(diǎn)
		p->Next = s; //i-1結(jié)點(diǎn)指向s地址
		return true;
	}
 
}
 
//打印
void ListPrint_L(LinkList L)
{
	Lnode* p = L->Next; //p指向第一個(gè)元素
	while (p)
	{
		cout << p->Data << " ";
		p = p->Next;
	}
	cout << endl;
}
 
 
//有序表的合并
void MergeList_L(LinkList La, LinkList Lb, LinkList& Lc)
{
	Lnode* pa = La->Next;//pa指向La中第一個(gè)元素
	Lnode* pb = Lb->Next;//pb指向Lb中第一個(gè)元素
	Lnode* pc = Lc = La;//使用La的頭結(jié)點(diǎn)作為Lc的頭結(jié)點(diǎn)
	while (pa && pb) //pa或pb為空時(shí)停止循環(huán)
	{
		//判斷pa的值是否小于等于pb的值,為真插入pa的值,不為真插入pb的值
		if (pa->Data <= pb->Data) 
		{
			pc->Next = pa; 
			pc = pa;
			pa = pa->Next;
		}
		else
		{
			pc->Next = pb;
			pc = pb;
			pb = pb->Next;
		}
	}
 
	pc->Next = pa ? pa : pb; //利用三目運(yùn)算插入pa或pb中剩余內(nèi)容
	delete Lb; //釋放Lb頭結(jié)點(diǎn)
}
 
int main()
{
	//1.創(chuàng)建單鏈表La
	LinkList La;
	Listinit_L(La); //初始話
	//將數(shù)組中的數(shù)據(jù)插入La
	int arr1[3] = { 1,7,8 };
	for (int i = 1; i <= 3; i++)
	{
		Listinsert_L(La, i, arr1[i-1]);
	}
	cout << "合并前La中的數(shù)據(jù)為:" << endl;
	ListPrint_L(La); 
 
 
	//2.創(chuàng)建單鏈表Lb
	LinkList Lb;
	Listinit_L(Lb); //初始話
	//將數(shù)組中的數(shù)據(jù)插入Lb
	int arr2[6] = {2,4,6,8,10,11};
	for (int i = 1; i <= 6; i++)
	{
		Listinsert_L(Lb, i, arr2[i - 1]);
	}
	cout << "合并前Lb中的數(shù)據(jù)為:" << endl;
	ListPrint_L(Lb);
 
	//3.創(chuàng)建Lc,將La與Lb中的值合并到Lc
	LinkList Lc;
	MergeList_L(La, Lb, Lc);
	cout << "合并后Lc的值為:" << endl;
	ListPrint_L(Lc);
 
 	
 
 
	system("pause");
	return 0;
}

三、最終結(jié)果

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C++實(shí)現(xiàn)數(shù)組中元素組合出最大值

    C++實(shí)現(xiàn)數(shù)組中元素組合出最大值

    這篇文章主要介紹了C++實(shí)現(xiàn)數(shù)組中元素組合出最大值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • C/C++程序編譯流程詳解

    C/C++程序編譯流程詳解

    C/C++程序編譯過程包括下面4個(gè)階段:1.預(yù)處理,2.編譯,3.匯編,4.鏈接。下面我們就來詳細(xì)分析下這幾個(gè)階段。
    2016-04-04
  • C語言實(shí)現(xiàn)掃雷小游戲(擴(kuò)展版可選擇游戲難度)

    C語言實(shí)現(xiàn)掃雷小游戲(擴(kuò)展版可選擇游戲難度)

    游戲目標(biāo)是找出所有沒有地雷的方格,完成游戲;要是按了有地雷的方格,游戲失??;玩家可標(biāo)記雷的位置,游戲以完成時(shí)間來評(píng)高低,并且用戶可以選擇游戲難度
    2019-10-10
  • 養(yǎng)成良好的C++編程習(xí)慣之內(nèi)存管理的應(yīng)用詳解

    養(yǎng)成良好的C++編程習(xí)慣之內(nèi)存管理的應(yīng)用詳解

    "養(yǎng)成良好的編程習(xí)慣"其實(shí)是相當(dāng)綜合的一個(gè)命題,可以從多個(gè)角度、維度和層次進(jìn)行論述和評(píng)判,如代碼的風(fēng)格、效率和可讀性;模塊設(shè)計(jì)的靈活性、可擴(kuò)展性和耦合度等等,要試圖把所有方面都闡述清楚必須花很多的精力,而且也不一定能闡述得全面
    2013-05-05
  • 排序算法模板實(shí)現(xiàn)示例分享

    排序算法模板實(shí)現(xiàn)示例分享

    這篇文章主要介紹了排序算法模板實(shí)現(xiàn)示例,需要的朋友可以參考下
    2014-03-03
  • C++為什么不能修改set里的值?非要修改怎么辦?

    C++為什么不能修改set里的值?非要修改怎么辦?

    因?yàn)橹暗奈恼掠姓f過C++中 set的介紹及用法,今天這篇文章我們就來說說C++為什么不能修改set里的值,如果非要修改的話應(yīng)該怎么辦,下面我們一起進(jìn)入文章看看下面內(nèi)容,需要的朋友可以參考以下,希望對(duì)你有所幫助
    2021-11-11
  • Matlab實(shí)現(xiàn)簡(jiǎn)單擴(kuò)頻語音水印算法詳解

    Matlab實(shí)現(xiàn)簡(jiǎn)單擴(kuò)頻語音水印算法詳解

    本文主要介紹了通過MATLAB設(shè)計(jì)并實(shí)現(xiàn)一種基于音頻的擴(kuò)頻水印算法,從而了解參數(shù)對(duì)擴(kuò)頻水印算法性能的影響。代碼具有一定的價(jià)值,感興趣的小伙伴可以關(guān)注一下
    2021-11-11
  • C語言--數(shù)字交換題目詳解

    C語言--數(shù)字交換題目詳解

    本文通過代碼給大家介紹c語言數(shù)字交換的題目,通過實(shí)例代碼給大家講解的很詳細(xì),具有一定的參考借鑒價(jià)值,對(duì)c語言感興趣的朋友一起看看吧
    2021-08-08
  • C++自定義函數(shù)示例詳解

    C++自定義函數(shù)示例詳解

    在數(shù)學(xué)中,函數(shù)是一種基本的數(shù)學(xué)對(duì)象,它建立了一個(gè)集合(稱為定義域)中的每個(gè)元素與另一個(gè)集合(稱為值域)中的唯一元素之間的對(duì)應(yīng)關(guān)系,這篇文章主要介紹了C++自定義函數(shù)示例詳解,需要的朋友可以參考下
    2025-03-03
  • Opencv?視頻讀取與寫入的實(shí)現(xiàn)示例

    Opencv?視頻讀取與寫入的實(shí)現(xiàn)示例

    本文將介紹如何使用OpenCV進(jìn)行視頻讀寫。通過閱讀本文,您將了解如何讀取視頻文件、處理視頻幀、寫入視頻文件等操作,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08

最新評(píng)論

西平县| 郸城县| 宣武区| 河北区| 镇远县| 枣庄市| 雅安市| 平舆县| 甘孜县| 根河市| 湖南省| 左云县| 营山县| 涞水县| 昌乐县| 长宁县| 渭南市| 丹棱县| 凯里市| 敦化市| 蕲春县| 鹤峰县| 西峡县| 贵南县| 云南省| 邹城市| 新泰市| 汉沽区| 日土县| 得荣县| 平陆县| 凯里市| 枣强县| 天祝| 宣恩县| 彰武县| 图木舒克市| 揭东县| 丰镇市| 峡江县| 尼勒克县|