关于顺序表的算法题(C语言实现)

1、在顺序表L中查找第一个值最大的元素,并删除该元素。

void fun(SqList *&L){
  int i,j=0;
  for (i=1;i<L->length;i++)
    if (L->data[i]>L->data[j])
      j=i;
  for (i=j;i<L->length-1;i++)
    L->data[i]=L->data[i+1];
  L->length--;
}

2、在顺序表L中查找最后一个值最小的元素,在该位置上插入一个值为x的元素。

void fun(SqList *&L,ElemType x){
  int i,j=0;
  for (i=1;i<L->length;i++)
    if (L->data[i]<=L->data[j])
      j=i;
  for (i=L->length;i>j;i--)
    L->data[i]=L->data[i-1];
  L->data[j]=x;
  L->length++;
}

3、删除整数顺序表L中所有值在[x,y]范围内的元素,并使时间复杂度为O(n)。

void fun(SqList *&L,ElemType x,ElemType y){
  int i,k=0;
  for (i=0;i<L->length;i++)
    if (!(L->data[i]>=x && L->data[i]<=y)){
      L->data[k]=L->data[i];
      k++;
    }
  L->length=k;
}

4、设计一个算法,将元素x插入到一个有序(从小到大排序)顺序表的适当位置上,并保持有序性。

通过比较在顺序表L中找到插入x的位置i,将该位置及后面的元素均后移一个位置,将x插入到位置i中,最后将L的长度增1。对应的算法如下:

void Insert(SqList *&L,ElemType x){
  int i=0,j;
  while (i<L->length && L->data[i]<x) i++;
  for (j=L->length-1;j>=i;j--)
    L->data[j+1]=L->data[j];
  L->data[i]=x;
  L->length++;
}

5、假设一个顺序表L中所有元素为整数,设计一个算法调整该顺序表,使其中所有小于零的元素放在所有大于等于零的元素的前面。

先让i、j分别指向顺序表L的第一个元素和最后一个元素。当i<j时循环:i从前向后扫描顺序表L,找大于等于0的元素,j从后向前扫描顺序表L,找小于0的元素,当i<j时将两元素交换(思路参见《教程》例2.4的解法一)。对应的算法如下:

void fun(SqList *&L){
  int i=0,j=L->length-1;
  while (i<j){
    while (L->data[i]<0) i++;
    while (L->data[j]>=0) j--;
    if (i<j) //L->data[i]与L->data[j]交换
      swap(L->data[i], L->data[j]);
  }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值