2301_80962607 2024-03-16 00:50 采纳率: 0%
浏览 2

为什么最后只执行第一个初始化单链表

好困扰,为什么我自定义的头文件在执行时只有初始化单链表执行了,等我输入abcde之后就不输出“单链表为”等等一系列东西了呢?

img


接下来是我的代码

img

img

img

img

img

img

img

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-03-16 00:50
    关注

    引自免费微信小程序:皆我百晓生

    从您提供的代码片段中,可以看出您在实现一个单链表操作的C++程序。问题在于您提到初始化单链表之后的其他功能没有正常执行。根据给出的代码,以下是可能的问题点和相应的解决方案:

    1. 内存分配错误: 在InitList(LinkNode *&L)函数中,您为头结点分配了内存,但在循环中给新节点分配内存时,s=(LinkNode *)malloc(sizeof(LinkNode));,然后将s->data=a[t];,但接下来的指针赋值应该是r->next=s;而非s=J;,应修改为r->next=s;

    2. 循环控制变量错误: 同样在InitList函数里,循环内对数组元素读取的索引应该是t而不是j,应该改为s->data=a[t];

    3. 函数调用顺序: 在主函数main中,您需要确保在调用各个功能函数之前正确地输入数据并初始化链表。例如,在调用DispList(L);前,请先完成所有插入操作。

    4. 缺失的函数调用: 根据您的描述,您希望在输入元素后执行一系列操作,但是您只在主函数中调用了InitList(L);。为了执行后续操作(如显示链表、计算长度、插入、删除等),您需要在适当的位置调用对应的函数。

    修复后的InitList函数应当如下:

    void InitList(LinkNode *&L) 
    {
        L = (LinkNode *)malloc(sizeof(LinkNode));
        LinkNode *r = L;
        r->next = NULL;
    
        int n, t;
        char a[100];
        cout << "输入几个元素" << endl;
        cin >> n;
        cout << "输入的元素为" << endl;
        for (int t = 0; t < n; t++) 
        {
            cin >> a[t];
            s = (LinkNode *)malloc(sizeof(LinkNode));
            s->data = a[t];
            r->next = s;
            r = s;
        }
        r->next = NULL;
    }
    

    同时,在main函数中,确保按照正确的逻辑顺序调用各个功能函数:

    int main(int argc, char* argv)
    {
        LinkNode *L;
        InitList(L);
    
        // 添加元素后进行以下操作
        int n;
        cin >> n;
        for (int i = 0; i < n; i++)
        {
            // 这里假设你已经实现了插入函数 ListInsert
            ListInsert(L, i+1, /* 输入元素 */);
        }
    
        cout << "输出单链表" << endl;
        DispList(L);
        
        // 继续调用其他函数...
        
        return 0;
    }
    

    请注意,由于您未提供完整的函数实现,上述分析是基于已有信息推测的。您还需要检查其他函数是否正确实现,并在合适的地方调用它们。另外,建议使用 C++ 的 new 操作符代替 malloc 来动态分配内存,这样可以更好地与 C++ 的面向对象特性配合。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 3月16日