鱼C论坛

 找回密码
 立即注册
查看: 2136|回复: 1

顺序串的插入

[复制链接]
发表于 2022-3-27 15:52:27 | 显示全部楼层 |阅读模式
30鱼币
请问如何实现顺序串的插入,要求用c++模板的写,课本为张铭主编的数据结构与算法。

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-27 17:19:04 | 显示全部楼层
如果有题目更好,不知道是不是你要的代码:
  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <ctime>
  4. #include <vector>
  5. #define MAX 50

  6. // 顺序线性表的存储结构
  7. template<typename T>
  8. class Sequence {
  9. public:
  10.         std::vector<T> data;
  11.         size_t length;
  12.         Sequence();
  13. };

  14. // 构造函数 - 初始值
  15. template<typename T>
  16. Sequence<T>::Sequence() {
  17.         for (int i = 0; i < MAX; i++) data.push_back(0);
  18.         length = 0;
  19. }

  20. // 插入值
  21. template<typename T>
  22. bool insert(Sequence<T> &list, int data, size_t index) {
  23.         if (index < 1 || index > list.length || list.length >= MAX) // 判断位置 index 是否符合条件
  24.         {
  25.                 std::cout << "ERROR" << std::endl;
  26.         }
  27.         else {
  28.                 for (int i = list.length - 1; i != index - 1; i--) {
  29.                         list.data[i + 1] = list.data[i]; // 将数据往后移一位
  30.                 }
  31.                 list.data[index - 1] = data; // 将元素插入
  32.                 list.length++;
  33.                 return true;
  34.         }
  35.         return false;
  36. }

  37. int main() {
  38.         Sequence<int> list;
  39.         int data;
  40.         size_t index;
  41.         srand(static_cast<unsigned> (time(NULL))); // 随机种子

  42.         // 例子:随机生成 10 个数,取值范围 0 至 100(含)
  43.         for (int i = 0; i < 10; i++) {
  44.                 list.data[i] = rand() % 100;
  45.                 list.length++;
  46.                 std::cout << list.data[i] << " "; // 打印
  47.         }
  48.         std::cout << std::endl;

  49.         // 测试
  50.         std::cout << "输入要添加的数据:";
  51.         std::cin >> data;
  52.         std::cout << "输入要添加的位置:";
  53.         std::cin >> index;
  54.         insert(list, data, index);
  55.         system("pause"); // 停顿一阵子
  56.         for (int i = 0; i < static_cast<int> (list.length); i++) {
  57.                 std::cout << list.data[i] << " "; // 打印
  58.         }
  59.         return 0;
  60. }
复制代码
  1. 23 83 45 7 67 41 38 12 69 91
  2. 输入要添加的数据:777
  3. 输入要添加的位置:7
  4. Press any key to continue . . .
  5. 23 83 45 7 67 41 777 12 12 69 91
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-29 02:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表