顺序表考点
#include <iostream>
#define MaxSize 10
定义结构体
typedef struct SqlList{
int data[MaxSize];
int size;
}SqlList,List;
1.输出打印
void printAll(SqlList L){
for (int i = 0; i < L.size; ++i) {
printf("%d \t",L.data[i]);
}
printf("\n");
}
2.查找值为X的索引位置
int findX(SqlList L,int X){
int i;
for (i = 0; i < L.size; ++i) {
if(X==L.data[i])
{
return i;
}
}
return -1;
}
3.给定一个值从小到打的有序顺序表L,插入X仍然有序
int find(SqlList L,int x){
int i;
for(i=0;i<L.size;i++){
if(x==L.data[i]||x<L.data[i])
{
return i;
}
}
return i;
}
SqlList insert(SqlList L,int x){
int j = find(L,x);
for (int i = L.size; i >=j ; i--) {
L.data[i+1]=L.data[i];
}
L.data[j]=x;
L.size++;
return L;
}
3.查找顺序表中值为X的元素个数
int countX(SqlList L,int x){
int sum=0;
for (int i = 0; i < L.size; ++i) {
if(L.data[i]==x)
sum++;
}
return sum;
}
4.设计一个算法把顺序表倒置
SqlList reverse(SqlList L){
int frist=0;
int last=L.size-1;
int temp;
while (frist<last){
temp=L.data[frist];
L.data[frist]=L.data[last];
L.data[last]=temp;
frist++;
last--;
}
return L;
}
5.两个顺序表尽可能快的交叉合并
SqlList mergeList(SqlList L1,SqlList L2){
SqlList L3;
int i,j,k;
i=j=k=0;
while (i<L1.size && j<L2.size){
if(L1.data[i]<L2.data[j])
L3.data[k++]=L1.data[i++];
else
L3.data[k++]=L2.data[j++];
}
while (i<L1.size)
L3.data[k++]=L1.data[i++];
while (j<L2.size)
L3.data[k++]=L2.data[j++];
L3.size=k;
return L3;
}
6.将顺序表L1中奇数放L2中,偶数放L3中
void sprit(SqlList L1,SqlList &L2,SqlList &L3){
int i,j,k;
i=0,j=0,k=0;
for (i = 0; i < L1.size ; i++) {
if (L1.data[i]%2==0)
L2.data[j++]=L1.data[i];
else
L3.data[k++]=L1.data[i];
}
L2.size=j;
L3.size=k;
}
7.采用二分查找元素key在有序表L中的位置。
int binsearch(SqlList L,int k){
int low=0,high=L.size-1,mid;
while (low<=high){
mid=(low+high)/2;
if (L.data[mid]==k)
return mid;
else if (L.data[mid]<k)
low=mid+1;
else if (L.data[mid]>k)
high=mid-1;
}
return -1;
}
8.顺序表中偶元素放前面,奇元素放后面
void partion(SqlList &L){
int i,j,temp;
i=0,j=L.size-1,temp=0;
while(i<j){
while (i<j && L.data[i] %2 == 0)
i++;
while (i<j && L.data[j] %2 == 1)
j--;
if (i<j){
temp=L.data[i];
L.data[i++]=L.data[j];
L.data[j--]=temp;
}
}
}
9.求顺序表L1和L2的交集放到L3中
void inter(SqlList L1,SqlList L2,SqlList &L3){
int i,j,k;
k=0;
for (i = 0; i < L1.size; i++) {
j=0;
while (j<L2.size && L1.data[i]!=L2.data[j])
j++;
if (j<L2.size && L1.data[i]==L2.data[j])
L3.data[k++]=L1.data[i];
}
L3.size=k;
}
测试代码
int main() {
SqlList L={1,2,3,4,5,6};
SqlList L2={2,4,6,7};
SqlList L3;
L.size=6;
L2.size=4;
printf("%d",binsearch(L,4));
return 0;
}