数据结构算法题:有一个顺序表L,其元素为整形数据,设计一个算法,将L中所有小于表头元素的整数放在前半部分,大于表头元素的整数放在后半部分。

网上查了这个题的代码,没有任何完整的能正确运行的,因为有点不太懂所以动手随便写了个能运行的调试看过程,分享给需要的朋友。#include<iostream>using namespace std;#define MaxSize 7typedef struct{ int data[MaxSize]; int length;}Sqlist;void InitList(Sql...
摘要由CSDN通过智能技术生成
网上查了这个题的代码,没有任何完整的能正确运行的,因为有点不太懂所以动手随便写了个能运行的调试看过程,分享给需要的朋友。
#include<iostream>
using namespace std;
#define MaxSize 7
typedef struct
{
	int data[MaxSize];
	int length;
}Sqlist;
void InitList(Sqlist &L)
{
	L.length = 0;
}

void move(Sqlist &L) { //L要改变所以用引用型
	int temp;
	int i = 0, j = L.length-1;
	temp = L.data[i];
	while (i<j) {
		/*关键步骤开始*/
		while (i < j&&L.data[j] > temp)
			j--;
		//j从左往右扫描,当来到第一个比temp小的元素时停止		,并且每走一步都要判断i是否小于j,这个判断容易遗漏。
		if (i < j) { //检测看是否已仍满足i < j,这一步同样很重要
			L.data[i] = L.data[j]; //移动元素。
			i++; //i右移一位。
		}
		while (i < j&&L.data[i] < temp) i++; //与上边的处理类似。
		if (i < j) { //与上边的处理类似。
			L.data[j] = L.data[i]; //与上边的处理类似。
			j--;
		}
		/*关键步骤结束*/
	}
	L.data[i] = temp; //将表首元素放在最终位置。
}
int main()
{
	Sqlist L;
	int k = 0,m=0;
	InitList(L);
	for
  • 6
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 可以使用双指针法,从表头和表尾同时开始遍历,交换两个指针所指向的元素,直到两个指针相遇为止。具体实现如下: 1. 定义两个指针i和j,别指向表头和表尾。 2. 当i<j时,执行以下操作: - 交换l[i]和l[j]的值。 - i指向下一个元素,即i=i+1。 - j指向上一个元素,即j=j-1。 3. 当i>=j时,逆置操作结束。 代码实现如下: void reverseList(int* l, int n) { int i = , j = n - 1; while (i < j) { int temp = l[i]; l[i] = l[j]; l[j] = temp; i++; j--; } } 其,l为顺序表的指针,n为顺序表的长度。该算法的时间复杂度为O(n),空间复杂度为O(1),是一种高效的逆置算法。 ### 回答2: 顺序表是由一系列元素按一定顺序排列而成的线性结构,它通常是通过数组实现的。要将顺序表逆置,我们可以使用两个指针,一个指向头部,一个指向尾部,每次将头部和尾部所指向的元素进行交换,然后头指针向后移动,尾指针向前移动,直到头指针和尾指针相遇为止。 具体实现可以按照以下步骤进行: 1. 定义两个指针,一个指向头部,一个指向尾部。 2. 循环遍历顺序表,在循环进行以下操作: 1) 交换头指针和尾指针所指向的元素。 2) 头指针向后移动一位。 3) 尾指针向前移动一位。 3. 当头指针和尾指针相遇时,循环结束。 4. 输出逆置后的顺序表。 这种算法的时间复杂度是O(n/2),其n是顺序表元素的个数,因为每个元素都只交换了一次,所以效率比较高。 具体代码实现如下: void ReverseList(int* l, int length){ int i = 0; int j = length - 1; while(i < j){ int temp = l[i]; l[i] = l[j]; l[j] = temp; i++; j--; } } 上述代码就是一个简单的将顺序表逆置的算法实现,可以很方便的用在实际的开发工作。 ### 回答3: 顺序表是一种线性结构,其所有元素都按照一定的顺序进行排列。当需要将顺序表元素逆置时,可以使用一种高效的算法来实现。下面将介绍一种简单的方法来逆置顺序表元素。 1. 首先,从顺序表的两端开始,依次交换每一个元素,直到间位置。例如,将第一个元素和最后一个元素交换,将第二个元素和倒数第二个元素交换,以此类推。 2. 一旦到达间位置,所有元素都已经被逆置。因此,逆置算法结束。 该算法的时间复杂度为O(N/2),其N是顺序表元素的数量。虽然该算法的实现非常简单,但是它可以在给定的时间复杂度内完成元素逆置的任务。因此,在编写任何需要逆置顺序表的程序时,可以直接使用该算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值