順序表最大值

public class SeqList {

private static final int MAXSIZE = 10;// 定义顺序表的最大存储容量
private int last; // 用于顺序表的最后一个元素的存储位置
private int[] data;

SeqList() {
	InitSeqList(MAXSIZE);
}

private void InitSeqList(int size) {
	data = new int[MAXSIZE];
	last = -1;
}

public int GetLength() {
	return last + 1;
}

public void GetSeqList() { // 取得 顺序表中的每个元素 ,并输出

	for (int j = 0; j < this.data.length; j++) {
		System.out.println("第" + (j + 1) + "个数据元素是:" + this.data[j]);
	}

}

public int InsertSeqList(int i, int x) {

	int j;
	if (last == MAXSIZE - 1) {
		System.out.println("表中满员了");
		return -1;
	}

	if (i < 1 || i > last + 2) {
		System.out.println("插入位置错误");
		return -1;
	}

	for (j = last; j >= i - 1; j--)
		data[j + 1] = data[j]; // 移动元素结点

	data[i - 1] = x; // 插入元素
	last++;
	return 1;

}

public int DeleteSeqList(int i) { // 删除指定位置的元素

	int j;

	if (i < 1 || i > last + 1) {
		System.out.println("你要删除的元素不存在");
		return 0;
	}

	for (j = i; j <= last; j++)
		data[j - 1] = data[j]; // 移动元素结点

	last--;
	return 1;

}

public int LocationSeqList(int x) {

	int i = 0;
	while (i <= last && data[i] != x)
		i++;

	if (i > last)
		return -1;
	else
		return i;
}

public int GetMax() { // 取得顺序表中的最大值
	int temp = 0;
	for (int i = 0; i < this.data.length; i++) {
		if (temp < this.data[i])
			temp = this.data[i];

	}
	return temp;
}

}

public class Test {

public static void main(String[] args) {

	SeqList s = new SeqList();
	
	System.out.println("顺序表的初始长度是:"+s.GetLength());
	
	s.InsertSeqList(1, 11);
	s.InsertSeqList(2, 22);
	s.InsertSeqList(3, 33);
	s.InsertSeqList(4, 44);
	s.InsertSeqList(5, 55);
	s.InsertSeqList(6, 66);
	s.InsertSeqList(7, 77);
	s.GetSeqList();	
	s.DeleteSeqList(6);	    

System.out.println(“查找44的元素位置是:”+s.LocationSeqList(44));
System.out.println(“顺序表最大值是:”+s.GetMax());

}
}

顺序表最大值有以下几种常见方法: ### 顺序比较法 通过遍历顺序表中的每个元素,依次比较并记录最大值。以下是使用 C 语言实现的示例代码: ```c #include <stdio.h> #define MAX_SIZE 100 typedef struct { int elem[MAX_SIZE]; int length; } SqList; int GetMax(SqList L) { int i, maxx = L.elem[0]; for (i = 0; i < L.length; i++) { if (maxx < L.elem[i]) { maxx = L.elem[i]; } } return maxx; } int main() { SqList L; L.length = 5; L.elem[0] = 1; L.elem[1] = 3; L.elem[2] = 2; L.elem[3] = 5; L.elem[4] = 4; int max = GetMax(L); printf("The max of SequenceList L is %d.\n", max); return 0; } ``` 此方法通过遍历顺序表,不断更新最大值,时间复杂度为 $O(n)$,其中 $n$ 是顺序表的长度[^2]。 ### 分治法 将顺序表分成两部分,分别出两部分的最大值,然后比较这两个最大值得到整个顺序表最大值。以下是使用 Python 实现的示例代码: ```python # 基本子算法(子问题规模小于等于2时) def get_max(max_list): return max(max_list) # 分治法 版本二 def solve2(init_list): n = len(init_list) if n <= 2: return get_max(init_list) # 分解(子问题规模为n/2) left_list, right_list = init_list[:n//2], init_list[n//2:] # 递归(树),分治 left_max, right_max = solve2(left_list), solve2(right_list) # 合并 return get_max([left_max, right_max]) if __name__ == "__main__": # 测试数据 test_list = [12, 2, 23, 45, 67, 3, 2, 4, 45, 63, 24, 23] # 最大值 print(solve2(test_list)) ``` 分治法将问题不断分解为子问题,递归解子问题,最后合并结果。其时间复杂度也为 $O(n)$,但在某些情况下可能有更好的性能表现[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值