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

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

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

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

先让i、j分别指向顺序表L的第一个元素和最后一个元素。当i

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

你可能感兴趣的:(数据结构,数据结构,c语言)