问题详述:
编写一个函数,其功能为随机初始化顺序表。
在主函数中调用该函数,实现功能:通过键盘输入随机数个数,随机初始化顺序表。
(注:不使用插入函数,只是随机初始化。)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX_SIZE 100
typedef struct {
int data[MAX_SIZE];
int length;
} SeqList;
void getrndlist(SeqList* list, int n) {
srand(time(NULL));
list->length = n;
for (int i = 0; i < n; i++) {
list->data[i] = rand() % 100;
}
}
int main() {
int n;
SeqList list;
scanf("%d", &n);
getrndlist(&list, n);
for (int i = 0; i < list.length; i++) {
printf("%d ", list.data[i]);
}
printf("\n");
return 0;
}
【以下回答由 GPT 生成】
所提供的代码示例是一个合理和可以工作的方法来实现顺序表的随机初始化。下面是我对代码的一些改进和建议,请参考:
1. 在 `initList` 函数中,将 `srand((unsigned)time(NULL))` 放在 for 循环外部。在循环中反复调用 `srand` 可能会影响到生成的随机数序列的质量。
2. 将 `initList` 函数的声明和定义放在一个头文件中,并在主函数中引入该头文件。这样的好处是可以更好地组织代码,并使代码更易于维护和重用。
3. 考虑使用 `std::vector` 来替代数组作为顺序表的容器。使用向量可以避免手动管理内存并提供更强大的功能和易用性。
以下是改进后的代码示例:
```cpp
// list.h
#ifndef LIST_H
#define LIST_H
#include <vector>
void initList(std::vector<int>& list, int length);
#endif
// list.cpp
#include "list.h"
#include <cstdlib>
#include <ctime>
void initList(std::vector<int>& list, int length) {
srand((unsigned)time(NULL));
list.resize(length);
for (int i = 0; i < length; i++) {
list[i] = rand() % 100;
}
}
// main.cpp
#include <iostream>
#include <vector>
#include "list.h"
int main() {
int length;
std::cout << "请输入随机数的个数: ";
std::cin >> length;
std::vector<int> list;
initList(list, length);
std::cout << "随机初始化后的顺序表为: ";
for (int num : list) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
这种改进的代码使用 std::vector
进行顺序表的存储,同时将 initList
函数的声明和定义放在了 list.h
和 list.cpp
中,使代码更加清晰和模块化。同时,通过使用向量作为顺序表的容器,代码更加易用且避免了手动管理内存的麻烦。
如果你有任何进一步的问题,请随时提问。
【相关推荐】