非递减有序顺序表的排序

由于编者水平有限,如有错误,请多多包涵。

/*
	File name: Example.cpp
	Description: 非递减有序线性表LA, 非递减有序线性表LB, 要求排序后存放在LC中,且LC元素仍然为非递减有序排列
	Author: Yang_Jiang
	Date: 2018年10月12日
	Compiler:Visual Studio 2008
*/

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

# define ElemType int //自定义数据类型
# define MaxSizeLA 15 //LA表长度
# define MaxSizeLB 20 //LB表长度


//定义结构体
typedef struct
{
	// ElemType elem1[MaxSize]; 可以直接开辟空间,也可以使用动态内存分配 一块连续的内存空间来使用
	ElemType* elem;
	int length; //表示该顺序表的实际长度

}SqList,*PSqList;




//函数声明
void inti_list(PSqList , int );  //初始化线性表
void insertLA(PSqList);  //向LA表插入非递减有序元素
void insertLB(PSqList); //向LA表插入非递减有序元素
void sort_list(PSqList LA, PSqList LB, PSqList LC); //排序后全部存放到LC表

int main()
{
	//非递减有序 顺序表LA , LB
	SqList LA;
	SqList LB;
	
	//非递减有序LC 排序完成后也是非递减有序顺序表
	SqList LC;

	//初始化顺序表LA , LB
	inti_list(&LA,MaxSizeLA);
	inti_list(&LB,MaxSizeLB);
	inti_list(&LC,MaxSizeLA + MaxSizeLB);
	
	//向LA LB 插入 非递减有序 数据
	insertLA(&LA); 
	insertLB(&LB); 
	
	//打印LA表数据
	for(int i=0; i< MaxSizeLA; i++)
	{
		printf("%d \t ", LA.elem[i]);
	}

	printf("\n");
	//打印LB表数据
	for(int i=0; i< MaxSizeLB; i++)
	{
		printf("%d \t ", LB.elem[i]);
	}
	
	//排序
	sort_list(&LA,&LB,&LC);
	
	printf("\n排序后:\n");
	
	//打印LC表数据
	for(int i=0; i < LC.length ; i++)
	{
		printf("%d \t ", LC.elem[i]);
	}


	return 0;
}

/*
	函数名:inti_list();
	参数:PSqList L , int length
	初始条件:MaxSize已经给定	
	功能:初始化线性表,长度为length 
	返回值:暂无
*/
void inti_list(PSqList L , int length)
{
	
	L->elem = (ElemType *) malloc(sizeof (ElemType) * length); //开辟一块连续的空间
	
	if( !L->elem )
	{
		exit(-1);  //动态内存空间开辟失败
	}
	else
	{
		L->length = 0;   //线性表实际长度为0
	}
	
}

/*
	函数名:insertLA();
	参数:PSqList L
	初始条件:线性表已经初始化	
	功能:向线性表LA添加非递减有序元素
	返回值:暂无
*/
void insertLA(PSqList LA)
{	
	int k = 1;

	for(int i=0; i< MaxSizeLA; i++)
	{
		LA->elem[i] = k + i;
		LA->length ++;
	}
	
}


/*
	函数名:insertLB();
	参数:PSqList L
	初始条件:线性表已经初始化	
	功能:向线性表LB添加非递减有序元素
	返回值:暂无
*/
void insertLB(PSqList LB)
{	
	int k = 2;

	for(int i=0; i< MaxSizeLB; i++)
	{
		LB->elem[i] = k + i;
		LB->length ++;
	}

}


/*
	函数名:sort_list();
	参数:PSqList LA, PSqList LB, PSqList LC
	初始条件:线性表LA,LB已经按非递减有序排列 且LC已经初始化	
	功能:非递减有序存放到LC表
	返回值:暂无
*/
void sort_list(PSqList LA, PSqList LB, PSqList LC)
{
	int a = 0; //LA下标
	int b = 0;	//LB下标
	int c = 0;// LC下标

	while( a < LA->length && b < LB->length)
	{
		if(LA->elem[a] <= LB->elem[b])
		{
			LC->elem[c] = LA->elem[a];
			c++;
			a++;
			LC->length++;
		}
		else
		{
			LC->elem[c] = LB->elem[b];
			c++;
			b++;
			LC->length ++;
		}
	
	}

	while( a < LA->length)
	{
		LC->elem[c] = LA->elem[a];
		c++;
		a++;
		LC->length++;
	}
	while( b < LB->length)
	{
		LC->elem[c] = LB->elem[b];
		b++;
		c++;
		LC->length++;
	}

}


/*
	总结
		为了更加理解指针和动态内存分配 没有使用 ElemType elem1[MaxSize] 的写法
		排序要注意 排列好后要判断LA和LB 还有没有数据存在 有数据存在直接存入LC 因为此时数据已经是排列好的

		如果LA LB ! (非递减有序线) 可以通过冒泡排序先对LA LB排序好 
		然后在进行 非递减有序线 排序
		
		顺序表的缺点: 插入和删除需要耗费大量的时间 代价太大了。
				 	  长度固定,需要预先分配存储空间,可能造成大量空间浪费或空间不足的情况。		

		本程序在Visual Studio 2008编译通过,文件是.cpp文件,代码的写法有点不规范,既有C语言
		语法也包含了C++语法 望海涵。
*/

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值