数据结构与算法练习题:插入元素x到顺序表以保持该表的有序性。

描述:顺序表A中的数据元素递增有序。试写一算法,将元素x插入到顺序表的适当位置上,以保持该表的有序性。

思路:题目中说A是一个顺序表,所以我们首先用结构体定义顺序表:

#define M 0x3f3f3f3f; 

typedef struct sqlist{
    int data[M];
    int length;
}Sqlist;

而我们知道对于顺序表,若是要插入一个元素,则需要使插入位置及其之后的元素都向后移动一个位置。因此插入操作之前,我们不妨先做好让顺序表的长度增加一这一准备工作。

现在来进行插入。题目中已经说明顺序表A是一个递增的有序表,所以选择与data[i]比较大小,如果插入元素x<=data[i],就在i位置上插入元素x,data[i]及其以后的元素向后移动。如果遍历了整个data数组都未发现比x大或者相等的元素,那么x一定放在最后一个位置,即我们在准备工作中添加的data[length]这一位置。因此在x传入的时候,我们需要将x与最后一个元素比较:如果小于等于最后一个元素,则遍历进行插入;如果大于最后一个元素,则直接将其放在data[length]。

代码如下:

​
void insert(Sqlist*L,int x){
    int i,j;
    L->length++;        //准备工作,先让data多出一个位置。
    if (x>L->data[length-2]){        //判断x与最大元素的大小关系,如果x更大则直接插入在最后。
        L->data[length-1]=x;
        }
    else{    //x比最大元素小。
        for (i=0;i<=L->length-2;i++){
            if(x<=L->data[i]){        //比较大小找到插入位置。
                for (j=L->length-2;j>=i;j--){
                    L->data[j+1]=L->data[j];        //data[i]及其以后的元素向后移动。
                    }
                L->data[i]=x;       //插入x
                break;
                }
            }
        }

​

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值