鱼C论坛

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

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

[复制链接]
发表于 2024-3-25 22:35:50 | 显示全部楼层 |阅读模式
5鱼币
#include <stdio.h>
#include <stdbool.h>
#define MAXSize 100
typedef int ElemType;
//描述顺序存储结构 
typedef struct{
        ElemType data[MAXSize];
        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[j]=L.data[j-1];}
        L.data[i-1]=e;
        L.length++;
        return true;
} 

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

//按值查找
bool LocateElem(SqList L,ElemType e){
        int i;
        for(i=0;i<L.length;i++){
        
           if(L.data[i]==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;
}

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`。

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

typedef int ElemType;
//描述顺序存储结构
typedef struct{
    ElemType data[MAXSize];
    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[j] = L.data[j-1];
    }
    L.data[i-1] = e;
    L.length++;
    return true;
}

//删除操作
bool ListDelete(SqList &L, int i, ElemType &e) {
    if(i<1 || i > L.length)
        return false;
    e = L.data[i-1];
    for(int j=i;j<L.length;j++){
        L.data[j-1] = L.data[j];
    }
    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 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> 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语言完成的代码,线性表插入的函数也需要, ...


非常抱歉,我在之前的回答中犯了错误。下面是修正后的代码:
#include <stdio.h>
#include <stdbool.h>

#define MAXSize 100

typedef int ElemType;

//描述顺序存储结构
typedef struct
{
    ElemType data[MAXSize];
    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[j] = L->data[j - 1];
    }
    
    L->data[i - 1] = e;
    L->length++;
    
    return true;
}

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

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-27 12:05

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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