数据结构考研学习笔记(二)---顺序表应用

**1.设计一个高效算法,将顺序表L得所有元素逆置,要求算法的空间复杂度为O(1)

2.线性表(a1,a2,…,an)中的元素递增有序且按顺序存储于计算机内。要求设计一算法,完成用最少时间在表中查找数值为x的元素,若找到则将其后继元素位置相交换,若找不到则将其插入表中并使表中元素递增有序**

本章节承接上一篇博客点击
下面展示一些 逆置

void Reverse(SqList L) {
	ElemType temp;
	for (int i = 0; i < L.length / 2; i++) {
		temp = L.data[i];
		L.data[i] = L.data[L.length - i - 1];
		L.data[L.length - i - 1] = temp;
	}
}

下面展示一些 查询更改位序

void SearchExchangeInsert(ElemType A[] , ElemType x, SqList L)
{
	int low = 0, high = L.length - 1, mid; int t;
	while (low <= high) {
		mid = (low + high) / 2;
		if (A[mid] == x) break;
		else if (A[mid] < x) low = mid + 1;
		else high = mid - 1;

	}
	if (A[mid] == x && mid != L.length - 1) {
		t = A[mid];A[mid]= A[mid + 1]; A[mid + 1] = t;
	}
	if (low > high) {
		int i;
		for ( i = L.length-1 ; i > high; i--)
			A[i + 1] = A[i];
		A[i] = x;
	}
}

原代码

下面展示一些 内联代码片

typedef struct {
	ElemType *data;
	int MaxSize , length;

}SqList;

/*----------------------------------------------------------------------------------------------------
	1.设计一个高效算法,将顺序表L得所有元素逆置,要求算法的空间复杂度为O(1)
	------------------------------------------------------------------
	算法思想:扫描顺序表L得前半部分元素,对于元素L.data[i](0<=i<L.length/2),将其后半部分得对应元素L.data[L.length-i-1]进行交换。
	---------------------------------------------------------------------------------------------------
*/
void Reverse(SqList L) {
	ElemType temp;
	for (int i = 0; i < L.length / 2; i++) {
		temp = L.data[i];
		L.data[i] = L.data[L.length - i - 1];
		L.data[L.length - i - 1] = temp;
	}
}

/*----------------------------------------------------------------------------------------------------
	2.线性表(a1,a2,...,an)中的元素递增有序且按顺序存储于计算机内。要求设计一算法,完成用最少时间在表中查找数值为x
	的元素,若找到则将其后继元素位置相交换,若找不到则将其插入表中并使表中元素递增有序
	---------------------------------------------------------------------------------------------------
	解放思想:顺序存储的线性表递增有序,可以顺序查找,也可以折半查找,题目要求“用最少的时间在表中查找数值为x的元素”,所以这
	里使用的折半查找
	---------------------------------------------------------------------------------------------------
*/
void SearchExchangeInsert(ElemType A[] , ElemType x, SqList L)
{
	int low = 0, high = L.length - 1, mid; int t;
	while (low <= high) {
		mid = (low + high) / 2;
		if (A[mid] == x) break;
		else if (A[mid] < x) low = mid + 1;
		else high = mid - 1;

	}
	if (A[mid] == x && mid != L.length - 1) {
		t = A[mid];A[mid]= A[mid + 1]; A[mid + 1] = t;
	}
	if (low > high) {
		int i;
		for ( i = L.length-1 ; i > high; i--)
			A[i + 1] = A[i];
		A[i] = x;
	}
}

int main(void)
{
	SqList L; ElemType e = 1;;
	L.length = 11;
	L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize);
	for (int i = 0; i < L.length; i++)
		L.data[i] = i;
	for (int i = 0; i < L.length; i++)
		printf("%d ", L.data[i]);
	printf("\n%d\n", L.length);
	Reverse(L);
	for (int i = 0; i < L.length; i++)
		printf("%d ", L.data[i]);
	printf("\n%d", L.length);
	printf("\n查询11,并置换后一位,找不到 就插入应在的递增顺序位置:\n");
	Reverse(L);
	L.data[5] = 7;
	L.data[6] = 7;
	SearchExchangeInsert(L.data,5,L);
	for (int i = 0; i < L.length; i++)
		printf("%d ", L.data[i]);
	printf("\n%d\n", L.length);
	getchar();
	getchar();
	return 0;
}

工程地址:后续更新

原创文章 27 获赞 68 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sf9090/article/details/105881512