m0_74062574 2023-03-17 13:04 采纳率: 76.5%
浏览 31
已结题

关于#数据结构#的问题:数据结构线性表给线性表赋初始值,为什么我的代码在线性表的初始化时,输入数据个数后无法输入线性表的初始值#include <iostream>(语言-c++)

数据结构 线性表 给线性表赋初始值,为什么我的代码在线性表的初始化时,输入数据个数后无法输入线性表的初始值

#include<iostream>
#define elementype int
#define MAXSIZE 5
using namespace std;

struct list {                    //线性表的建立
    elementype* elem;
    int length;
};

bool initlist(list& L) {        //线性表的初始化
    L.elem = new elementype[MAXSIZE];
    int a;
    cout << "请输入数据个数" << endl;
    cin >> a;
    cout << "请输入线性表初始值" << endl;
    if (a > 0 && a < MAXSIZE) {
        for (int i = 0; i < a ; i++) {
            cin>>L.elem[i];
        }
    }
    else {
        cout << "数据个数错误!";
        return 0;
    }
    if (!L.elem) {
        cout << "error" << endl;
        return 0;
    }
    L.length = a;
    cout << "线性表初始化成功!" << endl;
    return a;
}



int locatelist(const list& L, const elementype& m) {//查找线性表元素
    int i;
    for (i = 0; i < L.length; i++) {
        if (L.elem[i] == m) {
            return i + 1;
        }
    }
    return 0;
}

bool insertlist(list& L, const elementype& m, const int i)  //线性表的插入
{
    if (i<0 || i>L.length) {
        cout << "插入位置错误" << endl;
        return false;
        if (L.length == MAXSIZE) {
            cout << "线性表已满" << endl;
            return false;
        }
        if (L.length > 0) {
            int j;
            for (j = L.length - 1; j >= i; j--) {
                L.elem[j + 1] = L.elem[j];
            }
            L.elem[j] = m;
            L.length = L.length + 1;
            return true;
        }
    }
}

bool destorylist(list& L) {             //线性表的销毁
    if(L.elem){
        delete L.elem;
    }
    return true;
}


bool easelist(list& L, const int i) {   //线性表的删除
    if (L.length == 0) {
        cout << "线性表为空" << endl;
        return false;
    }
    if (i<0 || i>L.length) {
        cout << "删除位置错误" << endl;
        return false;
    }
    for (int j = i; j < L.length - 1; j++) {
        L.elem[j] = L.elem[j + 1];
    }
    L.length -= 1;
    return true;
}


int main() {
    struct list q;
    initlist(q);
    int n= initlist(q);
    //if(initlist(q))
    //cout << "原始线性表为:" << endl;
        //for (int z = 0; z < n ; z++) {
        //    cout<<q.elem[z];
        //}
    
    
    elementype a;
    cout << "请输入你想查找的元素" << endl;
    cin >> a;
    if (locatelist(q, a)) {
        cout << "查找成功,它的位置在下标" << locatelist(q, a) << endl;
    }
    else cout << "查找失败" << endl;

    int m;
    elementype b;
    cout << "请输入你想插入的元素" << endl;
    cin >> b;
    cout << "请输入你想插入的位置" << endl;
    cin >> m;
    if (insertlist(q, m, b)) {
        cout << "插入成功" << endl;
    }
    else  cout << "插入失败" << endl ;

    int c;
    cout << "请输入你想删除元素的位置" << endl;
    cin >> c;

    if (easelist(q, c)) {
        cout << "删除成功" << endl;
    }
    else cout << "删除失败" << endl;
    return 0;
}

  • 写回答

4条回答 默认 最新

  • lshen01 2023-03-17 13:15
    关注

    参考GPT和自己的思路:

    在你的代码中,你已经在 initlist 函数中读取了输入的数据个数并且正确的进行了处理。但是,你在 main 函数中又调用了 initlist 函数并读取了一次输入的数据个数,这样会导致多余的输入,导致程序出错。因此,你应该只调用一次 initlist 函数:

    int n = initlist(q);
    if(n) {
        cout << "原始线性表为:" << endl;
        for (int z = 0; z < n ; z++) {
            cout << q.elem[z];
        }
    }
    

    此外,你的 insertlist 函数存在问题,应该将 ifelse if 语句的逻辑判断反过来,先判断是否满,再判断是否越界。同时,在插入元素时,需要将 j 的初始值设为 L.length - 1 ,而不是 i

    bool insertlist(list& L, const elementype& m, const int i) //线性表的插入
    {
        if (L.length == MAXSIZE) { // 先判断是否满
            cout << "线性表已满" << endl;
            return false;
        } else if (i < 0 || i > L.length) { // 再判断是否越界
            cout << "插入位置错误" << endl;
            return false;
        }
        int j = L.length - 1; // 将 j 的初始值设为 L.length - 1
        for ( ; j >= i; j--) {
            L.elem[j + 1] = L.elem[j];
        }
        L.elem[j + 1] = m; // 插入位置为 j + 1
        L.length += 1;
        return true;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月25日
  • 已采纳回答 3月17日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 对于知识的学以致用的解释
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存
  • ¥15 CST保存项目时失败