欢迎光临散文网 会员登陆 & 注册

Chapter 2

2023-08-17 09:33 作者:就叫大嘴吧  | 我要投稿

将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。

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

#define Max 100

struct SqList{
	int data[Max];
	int length;
};

bool merge(SqList a, SqList b, SqList &c){
	// 新合并的表长度 小于 两表长度和 
	if(c.length < a.length + b.length){
		printf("新合并的表长度 小于 两表长度和");
		return false; 
	}
	int i = 0, j = 0, k = 0;
	while(i < a.length && j < b.length){
		if(a.data[i] <= b.data[j]){
			c.data[k] = a.data[i];
			k++, i++;
		}
		else{
			c.data[k] = b.data[j];
			k++, j++;
		}
	}
	
	// a 表中元素还有剩余 
	while(i < a.length){
		c.data[k] = a.data[i];
		k++, i++;
	}
	
	// b 表中元素还有剩余 
	while(j < b.length){
		c.data[k] = b.data[j];
		k++, j++; 
	}
	
	return true;
}

// 打印顺序表
void show(SqList s){
	if(s.length == 0){
		printf("线性表为空");
		return;
	}
	for(int i = 0; i < s.length; i++){
		printf("%d	", s.data[i]);
	}
	printf("\n"); 
}

int main(){
	
	SqList a = {{1, 3, 5, 7, 9}, 5};
	SqList b = {{2, 4, 6, 8, 10}, 5};
	SqList c;
	c.length = a.length + b.length;
	
	show(a);
	show(b);
	
	if(merge(a, b, c)){
		show(c);
	}
	
	return 0;
}


Chapter 2的评论 (共 条)

分享到微博请遵守国家法律