李多鱼 发表于 2024-3-25 22:35:50

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

#include <stdio.h>
#include <stdbool.h>
#define MAXSize 100
typedef int ElemType;
//描述顺序存储结构
typedef struct{
        ElemType data;
        int length;
}SqList;

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

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

//插入操作
bool ListInsert(SqList &L,int i,ElemType e){
        if(i<1||i>L.length+1||L.length == MAXSize)
        return false;
        for(int j=L.length;j>=i;j--){
       
           L.data=L.data;}
        L.data=e;
        L.length++;
        return true;
}

//删除操作
bool ListDelete(SqList &L,int i,ElemType &e) {
        if(i<1||i>L.length);
        return false;
        e=L.data;
        for(int j=i;j<L.length;j++)
           L.data=L.data;
        L.length--;
        return true;       
}

//按值查找
bool LocateElem(SqList L,ElemType e){
        int i;
        for(i=0;i<L.length;i++){
       
           if(L.data==e)
              return i+1;
        }
    return 0;
}

//主函数
int main(){
        SqList myList;
        ElemType e;
        bool result;
       
        void Initlist(SqList &myList);
        printf("初始化列表\n",myList);
       
        result = ListEmpty(myList);
    printf("列表是否为空: %s\n", result ? "是" : "否");
   
    // 插入元素
    for (int i = 1; i <= 5; i++) {
      result = ListInsert(SqList &myList, i, i * 10);
      printf("在位置 %d 插入元素 %d,结果: %s\n", i, i * 10, result ? "成功" : "失败");
    }
       
        // 查找元素位置
    int pos = LocateElem(SqList myList, 20);
    printf("元素 20 的位置是:%d\n", pos);

    // 删除第3个元素
    result = ListDelete(SqList &myList, 3, &e);
    if (result) {
      printf("删除第3个元素,删除的元素是:%d\n", e);
    } else {
      printf("删除第3个元素失败。\n");
    }
        return 0;
}


FishC 发表于 2024-3-25 22:36:10

这段代码中存在几个问题:

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

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

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

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

typedef int ElemType;
//描述顺序存储结构
typedef struct{
    ElemType data;
    int length;
}SqList;

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

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

//插入操作
bool ListInsert(SqList &L,int i,ElemType e){
    if(i<1 || i > L.length+1 || L.length == MAXSize)
      return false;
    for(int j=L.length;j>=i;j--){
      L.data = L.data;
    }
    L.data = e;
    L.length++;
    return true;
}

//删除操作
bool ListDelete(SqList &L, int i, ElemType &e) {
    if(i<1 || i > L.length)
      return false;
    e = L.data;
    for(int j=i;j<L.length;j++){
      L.data = L.data;
    }
    L.length--;
    return true;
}

int main() {
    SqList L;
    Initlist(L);

    ListInsert(L, 1, 10);
    ListInsert(L, 2, 20);
    ListInsert(L, 3, 30);

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

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

    return 0;
}

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

李多鱼 发表于 2024-3-25 22:43:35

FishC 发表于 2024-3-25 22:36
这段代码中存在几个问题:

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

这是个利用C语言完成的代码,线性表插入的函数也需要,而不是直接给表赋值

FishC 发表于 2024-3-25 22:43:48

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

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

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

#define MAXSize 100

typedef int ElemType;

//描述顺序存储结构
typedef struct
{
    ElemType data;
    int length;
} SqList;

//初始化
void InitList(SqList *L)
{
    L->length = 0;
}

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

//插入操作
bool ListInsert(SqList *L, int i, ElemType e)
{
    if (i < 1 || i > L->length + 1 || L->length == MAXSize)
      return false;
   
    for (int j = L->length; j >= i; j--)
    {
      L->data = L->data;
    }
   
    L->data = e;
    L->length++;
   
    return true;
}

//删除操作
bool ListDelete(SqList *L, int i, ElemType *e)
{
    if (i < 1 || i > L->length)
      return false;
   
    *e = L->data;
   
    for (int j = i; j < L->length; j++)
    {
      L->data = L->data;
    }
   
    L->length--;
   
    return true;
}

int main()
{
    SqList list;
    InitList(&list);
    ListInsert(&list, 1, 10);
    ListInsert(&list, 2, 20);
    ListInsert(&list, 3, 30);
   
    for (int i = 0; i < list.length; i++)
    {
      printf("%d ", list.data);
    }
   
    printf("\n");
   
    ElemType deletedElem;
    ListDelete(&list, 2, &deletedElem);
    printf("Deleted element: %d\n", deletedElem);
   
    for (int i = 0; i < list.length; i++)
    {
      printf("%d ", list.data);
    }
   
    return 0;
}

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 这个最后调用是什么问题,哪位大佬说一下