随机生成顺序表

题目

随机生成一个具有20个元素的顺序表L,其元素为小于100的非负整数数据,将L中所有小于50的整数放在顺序表的前半部分,大于等于50的整数放在顺序表的后半部分。

代码

#include<iostream>
#include<stdlib.h>
#include<time.h>
#include<math.h>
using namespace std;

#define MaxSize 20

typedef struct {
	int data[MaxSize];       //顺序表的数组数据
	int length;              //顺序表的当前长度
}SqList;//静态顺序表

//初始化顺序表
void InitList(SqList &L) {  
	L.length = 0;
}

//顺序表插入元素
bool ListInsert(SqList &L, int i, int n) {  //i:位序,n:插入数据
	//位序不合理
	if (i<1 || i>L.length + 1){             
		return false;
	}
	//顺序表满
	if (L.length == MaxSize) {              
		return false;
	}
	int k = L.length + 1;

	//若不是在表位插入,将元素后移
	if (i != k) {                
		for (int j = L.length; j >= i; j--) {
			L.data[j] = L.data[j - 1];
		}
	}

	L.data[i - 1] = n;         //赋值
	L.length++;                
	return true;
}



int main(){
	SqList L;
	InitList(L);           //初始化
	int x, num, q = 0;      //x:随机生成的第几个数,q:表中最后一个<50的位序
	srand((int)time(NULL));

	for (x = 0; x < 20; x++) {
		num = rand() % 101;         //生成随机数0-100
		if (num < 50) {
			q = q + 1;
			ListInsert(L, q, num);
		}
		else {
			ListInsert(L, q + 1, num);
		}
	}
	for (int a = 0; a < 20; a++) {
		cout << L.data[a] << '\t';
	}
	return 0;
}

问题

1、define 定义出错,导致无法识别

正确定义:#define MaxSize 20

报错情况:C2059、C2143等
在这里插入图片描述

建立两个顺序表(也称为线性表),通常涉及以下几个步骤: 1. **创建数组**:你可以选择使用动态数组(如C++中的`std::vector`,Java中的`ArrayList`)或者数组(手动管理内存)。首先确定列表的大小,然后分配相应的内存空间。 2. **随机生成元素**:使用随机数生成器函数(如C++的`rand()`,Java的`Random`类)生成指定范围内的随机整数。对于每个位置,生成一个新的随机值并将其存储到对应的位置。 3. **初始化第一个表**:循环遍历数组,将每次生成的随机数插入第一个顺序表。 4. **初始化第二个表**:同样,生成随机数并将它们添加到第二个顺序表,可以保证两个列表的元素是独立的。 5. **维护顺序表结构**:因为是顺序表,插入和删除操作可能会导致内部数据结构的变化。在插入或删除时,需要更新元素的索引。 以下是一个简单的伪代码示例(假设我们有`random_number_generator`和`insert_in_order_list`函数): ```cpp // C++ size_t list_size = 10; // 可以根据需求调整 int* list1 = new int[list_size]; int* list2 = new int[list_size]; for (size_t i = 0; i < list_size; ++i) { list1[i] = random_number_generator(); list2[i] = random_number_generator(); } // 然后你可以对这两个列表分别进行操作... delete[] list1; delete[] list2; // Java: List<Integer> list1 = new ArrayList<>(); List<Integer> list2 = new ArrayList<>(list_size); Random rand = new Random(); for (int i = 0; i < list_size; i++) { list1.add(rand.nextInt()); // 生成0到list_size-1之间的随机数 list2.add(rand.nextInt()); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值