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.


窝似嫩叠