两个有序顺序表的合并

顺序表合并

存储结构

typedef struct{
	ElemType *elem;	
	int Length;	
	int ListSize;
}SqList;

1、初始化线性表La,Lb,Lc
2、设置变量,i,j,k。i控制La元素下标,j控制Lb的元素下标,k控制L
c
3、当其中某一线性表放入完成时,将另外线性表后面的直接放下去。

初始化

void InitList(SqList &L)//创建线性表函数
{
 L.elem = (ElemType*)malloc(100 * sizeof(ElemType));
 L.Length = 0;
 L.ListSize = 100;
}

初始化数值

void InitData(SqList &L,int length)//初始化元素函数
{
 printf("请输入%d个线性表的元素/有序的:\n",length);
 for (int i = 0; i < length; i++)
 {
  scanf("%d", &L.elem[i]);
 }
 //更改线性表的长度
 L.Length = length;
}

插入函数

void InsertList(SqList &lc,int location,int data)
{
 /*
 * 因为这里插入到lc线性表,这里lc是空的。
 * 所以我就直接按照初始化lc数据的方式来插入
 *
 * 另一种情况是lc里面有数据,然后需要插入。当然这一题不是。
 * 这种情况的话首先要把Location后面的数全部往后挪一个位置。循环次数为n-i+1
 * 然后把Location处的值设置为data,就可以了
 */
 lc.elem[location] = data;
}

合并函数

    void MergeList(SqList la, SqList lb, SqList &lc)
       {
     int i, j,k;
     /*
      * 书上是初始化i,j=1
      * 所以书上下面的while循环写的是i<=la.length
      * 我从0开始,所以下面应该写i<length
      * 思路都是一样的
      */
	     i = 0;
	     j = 0;
	     k = 0;
	     while (i < la.Length&&j < lb.Length)//当两个都不为空的时候才判断
           {
	      if (la.elem[i] < lb.elem[j])
	      {
	       InsertList(lc, k, la.elem[i]);
	       i++;
	       //当前的k下标已经初始化完以后k自加,为后面的值做准备
	          k++;
	      }
	      else {
       InsertList(lc, k, lb.elem[j]);
       j++;
      //当前的k下标已经初始化完以后k自加,为后面的值做准备
       k++;
      }
     }
     //la和lb的Length不等
     //所以要区别情况
    while (i < la.Length)
      //如果i最后的值还是小于la的长度,且上面的while部分又结束了
      //说明lb已经结束了
     {
      InsertList(lc, k, la.elem[i]);
      i++;
      k++;
     }
     while (j < lb.Length)
	  {
	      InsertList(lc, k, lb.elem[j]);
	     j++;
	     k++;
     }
     //这里!一定要记得更新lc.length!!!!!!!!!
     lc.Length = k;
     printf("k:%d", k);
    }

注意点:
1、当lc添加元素了以后,最后要更新lc.length
2、如果i,j设置为1的起始值。while条件写成:while(i<=la.length&&j<=lb.length)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值