m0_74062574 2023-04-02 17:33 采纳率: 76.5%
浏览 11
已结题

关于#链表#的问题,如何解决?

1.链表创建成功之后卡了,
2.sclearnlink函数报错说t 是NULL,但是我的if里面不应该已经把l->next == nullptr的情况排除了吗
3.创建链表给他输入值的时候,怎么样写就是按空格分隔数据,怎么样写可以是实现一行一个数据(按行分隔数据)


#include <iostream>
using namespace std;
#define elementype int
#define Maxsize 20 
//链式栈
typedef struct sqlink {//链栈定义
    elementype data;
    sqlink* next;
}*linksq;


//获取栈的元素个数
int slength(const linksq& s) {
    return s->data;
}
//遍历栈元素输出
void sqnum(linksq& s) {
    int m = slength(s);
    cout << "从栈顶向下数据依次为" << endl;
    for (int i = 0; i < m; i++) {
        cout << s->next->data << " ";
    }

}

//链栈的初始化
bool initsqlink(linksq&l) {
    l = new sqlink;
    l->next = nullptr;
    l->data = 0; //将元素个数放在top上面指针的data 域里
    return true;
}
//判断栈是否为空
bool sisemptye(linksq&l) {
    if (l->next == nullptr) {
        return true;

    }
    else return false;

}


//压栈
void spush(linksq& s, const elementype& e) {
    sqlink* t = new sqlink;
    t->data = e;
    t->next = s->next;
    s->next = t;
}

//弹栈
void spop(linksq& s, elementype& e) {
    sqlink* p = s->next;
    e = p->data;
    s->next = p->next;
(s->data)--;
delete p;
}

//创建栈
bool creatsq(linksq& s) {
    cout << "请输入元素个数" << endl;
    cin >> s->data;
    elementype input;
    cout << "请输入栈的元素" << endl;
    for (int i = 0; i < s->data; i++) {
        cin >> input;
        spush(s, input);
        return true;
    }
    /* for (int i = 0; i < s->data; i++) {
         sqlink* p = new sqlink;
         cin >> p->data;
         p->next = s->next;
     }*/
}
//清空栈
bool sclearnlink(linksq& l) {
    if (l->next == nullptr) {
        cout << "链表为空" << endl;
        return false;
    }
    linksq t = l->next;
    linksq p = t;

    while (p) {
        p = t;
        t = t->next;
        delete p;
    }
    l->data = 0;
    l->next = nullptr;
    return 0;
}

//销毁栈
bool destorysq(linksq& l) {
    if (l == nullptr) {
        cout << "链表不存在" << endl;

    }
    linksq t = l->next, p;
    while (t) {
        p = t;
        t = t->next;
        delete p;
    }
    return true;
}

int main()
{
    //链栈
    linksq n = new sqlink;
    if (initsqlink(n))
    {
        cout << "链式栈初始化成功" << endl;
        if (creatsq(n)) {
            cout << "链表创建成功!" << endl;

        }
        else cout << "链表初始化失败!" << endl;

    }
    sqnum(n);
    elementype q;
    cout << "请输入要入栈的元素" << endl;
    cin >> q;
    spush(n, q);
    elementype f;
    spop(n, f);
    cout << "弹出元素为" << f<<endl;
    int w;
    cout << "清空栈则输入1,不清空则输入0" << endl;
    cin >> w;
    if (w) {
        if (sclearnlink(n))cout << "清空成功" << endl;
        else cout << "清空失败" << endl;

    }
    
}

  • 写回答

2条回答 默认 最新

  • CSDN专家-link 2023-04-02 17:47
    关注

    initsqlink里不用再new链表了啊,main里已经new了
    整体有不少错误,修改如下:

     
    #include <iostream>
    using namespace std;
    #define elementype int
    #define Maxsize 20 
    //链式栈
    typedef struct sqlink {//链栈定义
        elementype data;
        sqlink* next;
    }*linksq;
     
     
    //获取栈的元素个数
    int slength(const linksq& s) {
        return s->data;
    }
    //遍历栈元素输出
    void sqnum(linksq& s) {
        int m = slength(s);
        linksq p = s->next;
        cout << "从栈顶向下数据依次为" << endl;
        for (int i = 0; i < m; i++) {
            cout << p->data << " ";
            p = p->next;
        }
     
    }
     
    //链栈的初始化
    bool initsqlink(linksq&l) {
        l->next = nullptr;
        l->data = 0; //将元素个数放在top上面指针的data 域里
        return true;
    }
    //判断栈是否为空
    bool sisemptye(linksq&l) {
        if (l->next == nullptr) {
            return true;
     
        }
        return false;
     
    }
     
     
    //压栈
    void spush(linksq& s, const elementype& e) {
        sqlink* t = new sqlink;
        t->data = e;
        t->next = s->next;
        s->next = t;
        s->data++;
    }
     
    //弹栈
    void spop(linksq& s, elementype& e) {
        sqlink* p = s->next;
        if(p==NULL)
            return;
        e = p->data;
        s->next = p->next;
        (s->data)--;
        delete p;
    }
     
    //创建栈
    bool creatsq(linksq& s) {
        cout << "请输入元素个数" << endl;
        int n;
        cin>>n;
        s->data = 0;
        elementype input;
        cout << "请输入栈的元素" << endl;
        for (int i = 0; i < n; i++) {
            cin >> input;
            spush(s, input);
        }
        return true; 
    }
    //清空栈
    bool sclearnlink(linksq& l) {
        if (l->next == nullptr) {
            cout << "链表为空" << endl;
            return false;
        }
        linksq t = l->next;
        linksq p = t;
     
        while (t) {
            p = t;
            t = t->next;
            delete p;
        }
        l->data = 0;
        l->next = nullptr;
        return true;
    }
     
    //销毁栈
    bool destorysq(linksq& l) {
        if (l == nullptr) {
            cout << "链表不存在" << endl;
     
        }
        linksq t = l->next, p;
        while (t) {
            p = t;
            t = t->next;
            delete p;
        }
        return true;
    }
     
    int main()
    {
        //链栈
        linksq n = new sqlink;
        if (initsqlink(n))
        {
            cout << "链式栈初始化成功" << endl;
            if (creatsq(n)) {
                cout << "链表创建成功!" << endl;
     
            }
            else cout << "链表初始化失败!" << endl;
     
        }
        sqnum(n);
        elementype q;
        cout << "请输入要入栈的元素" << endl;
        cin >> q;
        spush(n, q);
        elementype f;
        spop(n, f);
        cout << "弹出元素为" << f<<endl;
        int w;
        cout << "清空栈则输入1,不清空则输入0" << endl;
        cin >> w;
        if (w) {
            if (sclearnlink(n))cout << "清空成功" << endl;
            else cout << "清空失败" << endl;
     
        }
        system("pause");
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月10日
  • 已采纳回答 4月2日
  • 创建了问题 4月2日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效