湖南 政府网站信息内容建设/百度推广优化师
查找递增顺序表中的元素
要求:
在递增的的线性表中查找数值为x的元素,若找到则将其与后继元素位置互换,若找不到,则将其插入到表中并使表依然有序。
分析:
这里是递增的顺序表,所以采用折半查找的方式较为高效。
若没有找到数值为x的元素,只需要将x插入到折半查找结束的min位置之后或者之前就行
这里是顺序表,插入元素则需要将待插入位置之后的所有元素后移一位。
下面展示实现代码:
#include<stdio.h>
#define MaxSize 30
struct SqList
{int data[MaxSize];int length;
};
int Init(struct SqList *L,int i)
{ int j = 0;for(;j<i;j++)scanf("%d",&(L->data[j]));L->length = j;return 0;
}
SearchExchangeInsert(struct SqList *L,int x)
{//通过折半查找来找到数值为x的元素,并与后继元素互换int low = 0;int high = L->length-1;int min = 0;while(low<=high){min = (low+high)/2;if(L->data[min]==x){int t = L->data[min];L->data[min] = L->data[min+1];L->data[min+1] = t;return 1;}else if(L->data[min]<x)low = min+1;else if(L->data[min]>x)high = min-1;}//若没有找到数值为x的元素,只需要将x插入到min位置之后或者之前就行//这里是顺序表,插入元素则需要将待插入位置之后的所有元素后移一位int i;if(L->data[min]<x){ for(i = L->length-1;i>=min+1;i--){L->data[i+1] = L->data[i];}L->data[i+1] = x;L->length++;return 0;}if(L->data[min]>x){ for(i = L->length-1;i>=min;i--){L->data[i+1] = L->data[i];}L->data[i+1] = x;L->length++;return 0;}
}
int main()
{struct SqList L;int i = 5;Init(&L,i);int x = 5;SearchExchangeInsert(&L,x);printf("执行结果如下:\n\n");for(i=0;i<L.length;i++){printf("%d",L.data[i]);}return 0;
}