鱼C论坛

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

c++

[复制链接]
发表于 2024-3-21 23:17:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
顺序表结构和运算定义,算法的实现以库文件方式实现,不得在测试主程序中直接实现;
比如存储、算法实现放入文件:seqList.h
实验程序有较好可读性,各运算和变量的命名直观易懂,符合软件工程要求;
程序有适当的注释。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-21 23:17:29 | 显示全部楼层
首先,让我们来创建一个顺序表的结构和运算定义的头文件 `seqList.h`,其中包含了顺序表的基本操作和算法实现。

  1. ++
  2. #ifndef SEQLIST_H
  3. #define SEQLIST_H

  4. #define MAX_SIZE 100 // 定义顺序表的最大长度

  5. typedef struct {
  6.     int data[MAX_SIZE]; // 顺序表的数据域
  7.     int length; // 顺序表的当前长度
  8. } SeqList;

  9. // 初始化顺序表
  10. void init(SeqList *list);

  11. // 判断顺序表是否为空
  12. int isEmpty(SeqList list);

  13. // 判断顺序表是否已满
  14. int isFull(SeqList list);

  15. // 获取顺序表的长度
  16. int getLength(SeqList list);

  17. // 在指定位置插入元素
  18. int insert(SeqList *list, int index, int data);

  19. // 删除指定位置的元素
  20. int delete(SeqList *list, int index);

  21. // 获取指定位置的元素
  22. int getElem(SeqList list, int index, int *data);

  23. // 查找指定元素的位置
  24. int locateElem(SeqList list, int data);

  25. // 打印顺序表中的所有元素
  26. void printList(SeqList list);

  27. #endif
复制代码


接下来在 `seqList.c` 文件中实现顺序表的各种操作。

  1. ++
  2. #include <stdio.h>
  3. #include "seqList.h"

  4. // 初始化顺序表
  5. void init(SeqList *list) {
  6.     list->length = 0;
  7. }

  8. // 判断顺序表是否为空
  9. int isEmpty(SeqList list) {
  10.     return (list.length == 0);
  11. }

  12. // 判断顺序表是否已满
  13. int isFull(SeqList list) {
  14.     return (list.length == MAX_SIZE);
  15. }

  16. // 获取顺序表的长度
  17. int getLength(SeqList list) {
  18.     return list.length;
  19. }

  20. // 在指定位置插入元素
  21. int insert(SeqList *list, int index, int data) {
  22.     if (index < 0 || index > list->length)
  23.         return 0; // 插入位置不合法

  24.     if (isFull(*list))
  25.         return 0; // 顺序表已满

  26.     for (int i = list->length - 1; i >= index; i--) {
  27.         list->data[i + 1] = list->data[i]; // 元素后移
  28.     }

  29.     list->data[index] = data;
  30.     list->length++;
  31.    
  32.     return 1;
  33. }

  34. // 删除指定位置的元素
  35. int delete(SeqList *list, int index) {
  36.     if (index < 0 || index >= list->length)
  37.         return 0; // 删除位置不合法

  38.     for (int i = index; i < list->length - 1; i++) {
  39.         list->data[i] = list->data[i + 1]; // 元素前移
  40.     }

  41.     list->length--;
  42.    
  43.     return 1;
  44. }

  45. // 获取指定位置的元素
  46. int getElem(SeqList list, int index, int *data) {
  47.     if (index < 0 || index >= list.length)
  48.         return 0; // 获取位置不合法

  49.     *data = list.data[index];
  50.    
  51.     return 1;
  52. }

  53. // 查找指定元素的位置
  54. int locateElem(SeqList list, int data) {
  55.     for (int i = 0; i < list.length; i++) {
  56.         if (list.data[i] == data) {
  57.             return i; // 找到元素的位置
  58.         }
  59.     }
  60.    
  61.     return -1; // 未找到元素
  62. }

  63. // 打印顺序表中的所有元素
  64. void printList(SeqList list) {
  65.     for (int i = 0; i < list.length; i++) {
  66.         printf("%d ", list.data[i]);
  67.     }
  68.     printf("\n");
  69. }
复制代码


现在你可以在测试主程序中使用头文件 `seqList.h` 来操作顺序表。

  1. ++
  2. #include <stdio.h>
  3. #include "seqList.h"

  4. int main() {
  5.     SeqList list;
  6.     init(&list);

  7.     insert(&list, 0, 10);
  8.     insert(&list, 1, 20);
  9.     insert(&list, 2, 30);

  10.     int data;
  11.     getElem(list, 1, &data);
  12.     printf("Element at index 1: %d\n", data); // Output: 20

  13.     int index = locateElem(list, 30);
  14.     printf("Element 30 is at index: %d\n", index); // Output: 2

  15.     delete(&list, 1);

  16.     printList(list); // Output: 10 30

  17.     return 0;
  18. }
复制代码


这就是一个简单的顺序表实现,你可以根据需要添加更多的操作和算法。请注意,在测试主程序中只使用头文件 `seqList.h`,而将具体实现放在 `seqList.c` 文件中,以便提高代码的可读性和可维护性。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 11:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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