¥1-3 SWUST oj 942: 逆置顺序表

这篇博客介绍了一个C++程序,用于创建并逆置一个顺序表。代码包括了创建顺序表、初始化、逆置和显示列表的功能。逆置操作通过遍历原列表并存储到临时数组中,然后反向填充回原列表来实现。

逆置顺序表

题目描述

在这里插入图片描述

源代码

#include<iostream>
#include<stdlib.h>
#include<malloc.h>
using namespace std;
typedef char ElemType;
class SqList
 {
 public:
	ElemType data[100];
	int length;
};
void CreateList(SqList *&L,ElemType a[],int n)//创建顺序表
{
	int i=0,k=0;
	L=(SqList *)malloc(sizeof(SqList));
	while(i<n)
	{
		L->data[k]=a[i];
		k++;i++;
	}
	L->length=k;
}
void InitList(SqList *&L)//初始化
{
	L=(SqList *)malloc(sizeof(SqList));
	L->length=0;
}
void Inverse(SqList *&L)//逆置顺序表
{
	int i=0,k=L->length-1;
	ElemType a[100];
	while(i<L->length)
	{
		a[i]=L->data[k];
		i++;k--;
	}
	i=0;
	while(i<L->length)
	{
		L->data[i]=a[i];
		i++;
	}
}
void ShowList(SqList *L)
{
	for(int i=0;i<L->length;i++)
	{
		if(i!=L->length)
		{
			cout<<L->data[i]<<" ";
		}else
		{
			cout<<L->data[i];
		}
	}
}


int main()
{
	int n;
	ElemType a[100];
	SqList *L;
	cin>>n;
	getchar();
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
	}
	CreateList(L,a,n);
	Inverse(L);
	ShowList(L);
	return 0;
}
### SWUST OJ 794 题目分析 SWUST OJ 794 的题目通常涉及动态规划或贪心算法的应用。虽然具体题目未提供,但从常见的题型来看,这类问题可能围绕背包问题、序列优化或其他经典的组合优化模型展开。 #### 动态规划的核心思想 动态规划是一种通过分解子问题并保存中间结果来解决复杂问题的方法。其核心在于定义状态转移方程以及初始化条件。例如,在引用中的买家问题中,状态转移方程被定义为: \[ a[i][v] = \max(a[i-1][v], a[i-1][v-w[i]]+c[i]) \] 这表示当前状态下最优解由前一状态的最大值决定,或者从前一状态减去物品重量后的价值加上当前物品的价值得到[^1]。 如果 SWUST OJ 794 是类似的背包问题,则可以采用相似的状态转移逻辑。假设 \( dp[j] \) 表示容量为 \( j \) 时能获得的最大收益,那么状态转移方程可能是: \[ dp[j] = \max(dp[j], dp[j - weight[i]] + value[i]) \] 其中 \( weight[i] \) 和 \( value[i] \) 分别代表第 \( i \) 件商品的重量和价值。 --- #### 贪心策略的可能性 另一种常见方法是贪心算法。如果 SWUST OJ 794 属于区间覆盖、活动安排等问题,则可以通过局部最优选择实现全局最优。例如,引用中的 Coin-row Problem 使用了贪心的思想,即每次取两个连续位之间的较大值作为下一步的选择依据[^2]。 对于此类问题,代码框架一般如下所示: ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<int> values(n); for (int i = 0; i < n; ++i) { cin >> values[i]; } if (n == 0) { cout << 0 << endl; return 0; } vector<int> dp(n, 0); dp[0] = values[0]; if (n >= 2) dp[1] = max(values[0], values[1]); for (int i = 2; i < n; ++i) { dp[i] = max(dp[i - 1], dp[i - 2] + values[i]); } cout << dp[n - 1] << endl; return 0; } ``` 该代码实现了基于贪心原则的动态规划求解过程,适用于某些特定场景下的最优化问题。 --- #### 可能的边界情况处理 无论使用哪种方法,都需要特别注意边界的设定与异常输入的处理。例如: - 当输入为空集合时,应返回零或提示无解; - 对于负权值的情况,需重新评估是否允许选取这些项目; - 如果存在重复计算的风险,可通过记忆化技术减少冗余操作。 以上几点均有助于提高程序鲁棒性和效率。 --- ### 结论 针对 SWUST OJ 794 的解答路径取决于实际问题描述。如果是典型的背包类问题,推荐运用动态规划;若是更倾向于局部决策累积成整体效果的情形下,则考虑引入贪心机制更为合适。最终方案还需结合具体的约束条件进一步细化调整。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值