鱼C论坛

 找回密码
 立即注册
查看: 183|回复: 3

这个最后调用是什么问题,哪位大佬说一下

[复制链接]
发表于 2024-3-25 22:35:50 | 显示全部楼层 |阅读模式
5鱼币
  1. #include <stdio.h>
  2. #include <stdbool.h>
  3. #define MAXSize 100
  4. typedef int ElemType;
  5. //描述顺序存储结构
  6. typedef struct{
  7.         ElemType data[MAXSize];
  8.         int length;
  9. }SqList;

  10. //初始化
  11. void Initlist(SqList &L){
  12.         L.length=0;
  13. }

  14. bool ListEmpty(SqList L) {
  15.     return L.length == 0;
  16. }

  17. //插入操作
  18. bool ListInsert(SqList &L,int i,ElemType e){
  19.         if(i<1||i>L.length+1||L.length == MAXSize)
  20.         return false;
  21.         for(int j=L.length;j>=i;j--){
  22.        
  23.            L.data[j]=L.data[j-1];}
  24.         L.data[i-1]=e;
  25.         L.length++;
  26.         return true;
  27. }

  28. //删除操作
  29. bool ListDelete(SqList &L,int i,ElemType &e) {
  30.         if(i<1||i>L.length);
  31.         return false;
  32.         e=L.data[i-1];
  33.         for(int j=i;j<L.length;j++)
  34.            L.data[j-1]=L.data[j];
  35.         L.length--;
  36.         return true;       
  37. }

  38. //按值查找
  39. bool LocateElem(SqList L,ElemType e){
  40.         int i;
  41.         for(i=0;i<L.length;i++){
  42.        
  43.            if(L.data[i]==e)
  44.               return i+1;
  45.         }
  46.     return 0;
  47. }

  48. //主函数
  49. int main(){
  50.         SqList myList;
  51.         ElemType e;
  52.         bool result;
  53.        
  54.         void Initlist(SqList &myList);
  55.         printf("初始化列表\n",myList);
  56.        
  57.         result = ListEmpty(myList);
  58.     printf("列表是否为空: %s\n", result ? "是" : "否");
  59.    
  60.     // 插入元素
  61.     for (int i = 1; i <= 5; i++) {
  62.         result = ListInsert(SqList &myList, i, i * 10);
  63.         printf("在位置 %d 插入元素 %d,结果: %s\n", i, i * 10, result ? "成功" : "失败");
  64.     }
  65.        
  66.         // 查找元素位置
  67.     int pos = LocateElem(SqList myList, 20);
  68.     printf("元素 20 的位置是:%d\n", pos);

  69.     // 删除第3个元素
  70.     result = ListDelete(SqList &myList, 3, &e);
  71.     if (result) {
  72.         printf("删除第3个元素,删除的元素是:%d\n", e);
  73.     } else {
  74.         printf("删除第3个元素失败。\n");
  75.     }
  76.         return 0;
  77. }
复制代码


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

使用道具 举报

发表于 2024-3-25 22:36:10 | 显示全部楼层
这段代码中存在几个问题:

1. `#include ` 和 `#include ` 两处的代码不完整,应该补充完整的头文件名。

2. 在插入操作 `ListInsert` 中,循环中的赋值语句 `L.data=L.data;` 是没有必要的,应该是 `L.data[j] = L.data[j-1];`。

3. 在删除操作 `ListDelete` 中,循环中的条件判断 `j<L.length` 应该改为 `j>i`。

下面是修正后的代码:
  1. #include <iostream>
  2. #define MAXSize 100

  3. typedef int ElemType;
  4. //描述顺序存储结构
  5. typedef struct{
  6.     ElemType data[MAXSize];
  7.     int length;
  8. }SqList;

  9. //初始化
  10. void Initlist(SqList &L){
  11.     L.length=0;
  12. }

  13. bool ListEmpty(SqList L) {
  14.     return L.length == 0;
  15. }

  16. //插入操作
  17. bool ListInsert(SqList &L,int i,ElemType e){
  18.     if(i<1 || i > L.length+1 || L.length == MAXSize)
  19.         return false;
  20.     for(int j=L.length;j>=i;j--){
  21.         L.data[j] = L.data[j-1];
  22.     }
  23.     L.data[i-1] = e;
  24.     L.length++;
  25.     return true;
  26. }

  27. //删除操作
  28. bool ListDelete(SqList &L, int i, ElemType &e) {
  29.     if(i<1 || i > L.length)
  30.         return false;
  31.     e = L.data[i-1];
  32.     for(int j=i;j<L.length;j++){
  33.         L.data[j-1] = L.data[j];
  34.     }
  35.     L.length--;
  36.     return true;
  37. }

  38. int main() {
  39.     SqList L;
  40.     Initlist(L);

  41.     ListInsert(L, 1, 10);
  42.     ListInsert(L, 2, 20);
  43.     ListInsert(L, 3, 30);

  44.     std::cout << "Length: " << L.length << std::endl;
  45.    
  46.     ElemType e;
  47.     ListDelete(L, 2, e);
  48.     std::cout << "Deleted element: " << e << std::endl;

  49.     std::cout << "Length: " << L.length << std::endl;

  50.     return 0;
  51. }
复制代码


这样你就可以在主函数中进行调用了。在这个例子中,我们先初始化了一个顺序表 `L` 然后连续插入三个元素 10、20 和 30。然后删除了第二个位置上的元素,并输出删除的元素值和当前顺序表的长度。

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

使用道具 举报

 楼主| 发表于 2024-3-25 22:43:35 | 显示全部楼层
FishC 发表于 2024-3-25 22:36
这段代码中存在几个问题:

1. `#include ` 和 `#include ` 两处的代码不完整,应该补充完整的头文件名。 ...

这是个利用C语言完成的代码,线性表插入的函数也需要,而不是直接给表赋值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-3-25 22:43:48 | 显示全部楼层
李多鱼 发表于 2024-03-25 22:43
这是个利用C语言完成的代码,线性表插入的函数也需要, ...


非常抱歉,我在之前的回答中犯了错误。下面是修正后的代码:

  1. #include <stdio.h>
  2. #include <stdbool.h>

  3. #define MAXSize 100

  4. typedef int ElemType;

  5. //描述顺序存储结构
  6. typedef struct
  7. {
  8.     ElemType data[MAXSize];
  9.     int length;
  10. } SqList;

  11. //初始化
  12. void InitList(SqList *L)
  13. {
  14.     L->length = 0;
  15. }

  16. //判断线性表是否为空
  17. bool ListEmpty(SqList L)
  18. {
  19.     return L.length == 0;
  20. }

  21. //插入操作
  22. bool ListInsert(SqList *L, int i, ElemType e)
  23. {
  24.     if (i < 1 || i > L->length + 1 || L->length == MAXSize)
  25.         return false;
  26.    
  27.     for (int j = L->length; j >= i; j--)
  28.     {
  29.         L->data[j] = L->data[j - 1];
  30.     }
  31.    
  32.     L->data[i - 1] = e;
  33.     L->length++;
  34.    
  35.     return true;
  36. }

  37. //删除操作
  38. bool ListDelete(SqList *L, int i, ElemType *e)
  39. {
  40.     if (i < 1 || i > L->length)
  41.         return false;
  42.    
  43.     *e = L->data[i - 1];
  44.    
  45.     for (int j = i; j < L->length; j++)
  46.     {
  47.         L->data[j - 1] = L->data[j];
  48.     }
  49.    
  50.     L->length--;
  51.    
  52.     return true;
  53. }

  54. int main()
  55. {
  56.     SqList list;
  57.     InitList(&list);
  58.     ListInsert(&list, 1, 10);
  59.     ListInsert(&list, 2, 20);
  60.     ListInsert(&list, 3, 30);
  61.    
  62.     for (int i = 0; i < list.length; i++)
  63.     {
  64.         printf("%d ", list.data[i]);
  65.     }
  66.    
  67.     printf("\n");
  68.    
  69.     ElemType deletedElem;
  70.     ListDelete(&list, 2, &deletedElem);
  71.     printf("Deleted element: %d\n", deletedElem);
  72.    
  73.     for (int i = 0; i < list.length; i++)
  74.     {
  75.         printf("%d ", list.data[i]);
  76.     }
  77.    
  78.     return 0;
  79. }
复制代码


这段代码实现了顺序存储的线性表,并包括了初始化、判断线性表是否为空、插入元素和删除元素等操作。在 `ListInsert` 函数中,我们通过将元素后移来插入新元素,并更新线性表的长度。在 `ListDelete` 函数中,我们将指定位置后面的元素依次前移,并更新线性表的长度。最后,我们在 `main` 函数中进行了简单的测试,插入了三个元素并删除了第二个元素。

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 18:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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