0.结构体
typedef struct SqlList {
datatype data[MaxSize];
int size;
};
0.打印顺序表
void prin(SqList L) {
for (int i = 0; i < L.length; i++)
{
printf("%d\t", L.data[i]);
}
printf("\n");
}
1.设计一个算法求顺序表中值为x的结点的索引位置
int find(SqList L, int x)
{
int i;
for (i; i < L.length; i++)
{
if (L.data[i] > x)
{
break;
}
}
return i;
}
2.给定一个值从小到大的有序顺序表L,插入x仍有序
void insert(SqList& L, int x) {
int j = find(L, x);
for (int i = L.length; i >= j; i--)
L.data[i+1] = L.data[i];
L.data[j] = x;
L.length++;
}
3.查找顺序表中值为x的元素个数
int count(SqList L, int x)
{
int count=0;
for (int i; i < L.length; i++)
{
if (L.data[i] == x)
{
count++;
}
}
return count;
}
4.设计一个算法把顺序表倒置
void reverse(SqList &L)
{
int i, j;
int x;
i = 0;
j = L.length-1;
while (i < j)
{
x = L.data[j];
L.data[j] = L.data[i];
L.data[i] = x;
i++;
j--;
}
}
void reverse2(SqList& L)
{
int t;
for (int i = 0; i < L.length / 2; i++)
{
t = L.data[i];
L.data[i] = L.data[L.length - 1-i];
L.data[L.length - 1-i] = t;
}
}
5.两个顺序表尽可能快的交叉合并
void mergeSqList(SqList L1, SqList L2, SqList &L3)
{
int i, j, k;
i = j = k = 0;
while (i < L1.length && j < L2.length)
{
if (L1.data[i] < L2.data[j])
L3.data[k++] = L1.data[i++];
else
L3.data[k++] = L2.data[j++];
}
while(i<L1.length)
L3.data[k++] = L1.data[i++];
while (j < L2.length)
L3.data[k++] = L2.data[j++];
L3.length = k;
}
6.将顺序表L1中的奇数放表L2中,偶数放L3中
void sprit(SqList L1, SqList &L2, SqList& L3)
{
int i, j, k;
i = j = k = 0;
for (i = 0; i < L1.length; i++)
{
if (L1.data[i] % 2 == 0)
L2.data[j++] = L1.data[i];
else
L3.data[k++] = L1.data[i];
}
L2.length = j;
L3.length = k;
}
7.采用二分查找元素key在有序表L中的位置。
int binsearch(SqList L, int k)
{
int low = 0, high = L.length - 1,mid;
while (low <= high)
{
mid = (low + high) / 2;
if (L.data[mid] == k)
return 1;
else if (L.data[mid] < k)
high = mid - 1;
else if (L.data[mid] > k)
low = mid + 1;
}
return -1;
}
8.顺序表中偶元素放前面,奇元素放后面
void partion(SqList& L)
{
int i, j;
int x;
i = 0;
j = L.length - 1;
while (i < j)
{
while (i < j && L.data[i] % 2 == 1)
i++;
while (i < j && L.data[j] % 2 == 0)
j--;
if ( i < j)
{
x = L.data[i];
L.data[i++] = L.data[j];
L.data[j--] = x;
}
}
}
9.求顺序表L1和L2的交集放到L3中
//书上的
void inter(SqlList* la, SqlList* lb, SqlList* lc)
{
int i, j, k;
k = 0;
for (i = 0; i < la->size; i++)
{
j = 0;
while (j < lb->size && la->a[i] != lb->a[j])
j++;
if (j < lb->size)
lc->a[k++] = la->a[i];
}
lc->size = k;
}
//自己写的
void inter(SqList L1, SqList& L2, SqList& L3)
{
int i, j, k;
i = j = k = 0;
for (i = 0; i < L1.length; i++)
for (j = 0; j < L2.length; j++)
{
if (L1.data[i] == L2.data[j])
L3.data[k++] = L1.data[i];
}
L3.length = k;
}
Q.E.D.