有序表的合並---順序表實現


/*
	有序表的合並---用順序表實現 
*/

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

#define MAXSIZE 100
typedef int ElemType;
typedef struct SqList{
	ElemType * elem;
	int length;
}SqList;

/*
	順序表的初始化 
*/
void InitList_Sq(SqList * L){
	L->elem = (ElemType * )malloc(sizeof(ElemType) * MAXSIZE);
	if(!L->elem)exit(-1);
	L->length = 0;
}

/*
	順序表元素的插入 
*/
int ListInsert_Sq(SqList * L, int i, ElemType e){
	if(i < 1 || i > L->length + 1) return -1;
	if(L->length == MAXSIZE) return -1;
	int j;
	for(j = L->length - 1; j >= i - 1; j--){
		L->elem[j + 1] = L->elem[j];
	}
	L->elem[i - 1] = e;
	L->length++;
	return 1;
}

/*
	有序表的合並 
*/
void MergeList_Sql(SqList LA, SqList LB, SqList * LC){	
	//指針pa和pb的初值分別指向兩個表的第一個元素 
	ElemType * pa = LA.elem;
	ElemType * pb = LB.elem;
	//新表長度為待合並兩表的長度和 
	LC->length = LA.length + LB.length;
	//為合並后的新表分配一個數組空間 
	LC->elem = (ElemType *)malloc(sizeof(ElemType) * LC->length);
	//pc指向新表第一個元素 
	ElemType * pc = LC->elem;
	//pa_last指向LA表的最后一個元素。pb_last指向LB表的最后一個元素  
	ElemType * pa_last = LA.elem + (LA.length - 1);
	ElemType * pb_last = LB.elem + (LB.length - 1);
	while(pa <= pa_last && pb <= pb_last){
		//依次取兩個表中值最小的結點 
		if(*pa <= *pb){
			//注意這里的操作:pa地址的值賦給pc指針指向的空間,然后pa地址加一,pc加一 
			*pc++ = *pa++;
		}else{
			*pc++ = *pb++;
		}
	}
	//LB表已經到達表尾,將LA中剩余元素加入LC 
	while(pa <= pa_last) *pc++ = *pa++;
	//LA表已經到達表尾,將LB中剩余元素加入LC
	while(pb <= pb_last) *pc++ = *pb++; 	
}

/*
	輸出用於測試 
*/
void Test(SqList * L){
	int i;
	for(i = 0; i < L->length; i++){
		printf("%d ", L->elem[i]);
	}
	printf("\n"); 
} 
int main(){
	SqList LA;
	SqList LB;
	InitList_Sq(&LA);
	InitList_Sq(&LB);
	//往LA表中插入1~10數字
	int i;
	for(i = 1; i <= 10; i++){
		ListInsert_Sq(&LA, i, i);	
	}
	printf("順序表LA\n");
	Test(&LA);
	//往LB表中插入5~13數字
	 for(i = 1; i <= 9; i++){
		ListInsert_Sq(&LB, i, i + 4);
	}
	printf("順序表LB\n");
	Test(&LB);
	
	SqList LC;
	MergeList_Sql(LA, LB, &LC);
	printf("順序表LC\n");
	Test(&LC);
	return 0;
} 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM