兩個有序順序表合併成一個有序順序表

一 概述

將兩個有序順序表合併爲一個新的有序表,並由函數返回結果順序表。實際過程中應該不斷取下兩個順序表表頭較小的結點存在新的順序表中,然後,將其中某個表中的剩餘數據直接加到新的順序表後面。

二 代碼實現

/*合併兩個有序順序表*/ 
#include <iostream>
using namespace std;
typedef int ElemType; 
#define MAXSIZE 100
#define ERROR 0
#define OK 1

typedef struct {
	
	ElemType *elem;
	int length;
}SqList;

int InitOrderList(SqList &L1,SqList &L2,SqList &L3){
	
	L1.elem = new ElemType[MAXSIZE];
	L2.elem = new ElemType[MAXSIZE];
	L3.elem = new ElemType[MAXSIZE]; 
	
	if(!L1.elem || !L2.elem || !L3.elem){
		
		return ERROR;
	}
	return OK;
}

int MargeOrderList(SqList L1,SqList L2,SqList &L3){
	
	if(L1.length + L2.length > L3.length){
		return false;
	}

	int i=0,j=0,k=0;
	
	while (i < L1.length && j < L2.length){
		if(L1.elem[i] <= L2.elem[j]) {
			L3.elem[k++] = L1.elem[i++];
		}else {
			L3.elem[k++] = L2.elem[j++];
		}
	}
	
	while (i < L1.length) {
		L3.elem[k++] = L1.elem[i++];
	}
	
	while (j < L2.length) {
		L3.elem[k++] = L2.elem[j++];
	}
	L3.length = k;
	return OK;
}

int main(){
	
	SqList L1,L2,L3;
	int select = -1,i; 
	
	cout<<"將兩個有序表合併成一個有序表!"<<endl;
	cout<<"1.初始化有序線性表!"<<endl;
	cout<<"2.插入6個數到有序表L1!"<<endl;
	cout<<"3.插入7個數到有序表L2!"<<endl;
	cout<<"4.將有序表L1和L2合併到L3!"<<endl;
	cout<<"0.退出!"<<endl;
	
	while(select != 0){
		
		cout<<"請選擇:";
		cin>>select; 
		switch(select){
			case 1:
				if(InitOrderList(L1,L2,L3)){
					cout<<"有序表初始化成功!"<<endl ; 
				}else{
					cout<<"有序表初始化失敗!"<<endl;
				} 
				break;
			case 2:
				for(i = 0; i < 6; i++) {
					cin>>L1.elem[i];
				}
				L1.length = 6;
				break;
			case 3:
				for(i = 0; i < 7; i++) {
					cin>>L2.elem[i];
				}
				L2.length = 7;
				break;
			case 4:
				MargeOrderList(L1,L2,L3);
				for(i = 0; i < L3.length; i++){
					cout<<L3.elem[i]<<" ";
				}
				cout<<endl;
				break;
		}
	}
	return 0;
}

三 結果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章