a13764946 2024-09-26 15:25 采纳率: 22.2%
浏览 6

简单链表创建之意外结果

为什么链表创建的结果会出乎我的意料

#include<iostream>
#include<malloc.h>
int n;
using namespace std;
typedef struct Student{
    string name;
    int age;
    struct Student *next;
}Student;
//创建
Student* creat_list(int n)
{
    Student *list=(Student *)malloc(sizeof(Student));
    if(list==NULL) return NULL;
    Student *p=list;
    cout<<"请输入链表内部信息"<<endl;
    for(int i=0;i<n;i++)
    {
        Student *tmp=(Student *)malloc(sizeof(Student));
        string name1;
        int age1;
        cin>>name1>>age1;
        tmp->name=name1;
        tmp->age=age1;
        p->next=tmp;
        p=p->next;
    }
    p->next=NULL;
    return list;
}
 

 
//增
Student* insertelem(Student *list,int pos,Student *obj)
{
    if(pos<0 ||pos>n)
    {
        cout<<"error input"<<endl;
        return list;
    }
    Student *vis=(Student *)malloc(sizeof(Student));
    Student *p1=list;
    vis->age=obj->age;vis->name=obj->name;vis->next=NULL;
    int i=0;
    if(pos==0){
        vis->next=list;
        return vis;
    }
    for(i=0;i<pos-1 &&p1!=NULL;i++){
        p1=p1->next;
    }
    if(p1=NULL){
        cout<<"out of position";
        return list;
    }
    vis->next=p1->next;//vis.next->p1.next
    p1->next=vis;
    return list;
}
 
 
//删
Student* deleteelem(Student *list,int pos)
{
    if(pos<0 ||pos>=n)
    {
        cout<<"error input";
        return list;
    }
    if(pos==0)
    {
        Student *tmp=list;
        list=list->next;
        free(tmp);
        return list;
    }
    Student *p1=list;
    for(int i=0;i<pos-1 &&p1->next!=NULL;i++){
        p1=p1->next;
    }
    Student *tmp=p1->next;
    p1=tmp->next;
    free(tmp);
    return list;
}
//查
void searchelem(Student* list,string name1)
{
    bool flag=true;
    Student* vis;
    for(vis=list;vis!=NULL;vis=vis->next)
    {
        if(vis->name==name1)
        {
            cout<<vis->age;
            cout<<"successfully founded it"<<endl;
            flag=false;
        }
    }
    if(flag){
        cout<<"dint’t founded it"<<endl;
    }
}
//改
Student* modifyelem(Student *list,Student *obj){
    Student *p;
    for(p=list;p;p=p->next){
    if(p->name==obj->name){
        {
            string newname;int newage;
            cin>>newname>>newage;
            p->name=newname;
            p->age=newage;
            break;
        }
    }
    return list;
}
//show
void list_visit(Student *list) {
    for (Student *p = list; p; p = p->next) {
       cout << p->name << " " << p->age << endl;
    }
}
 
 
#include<iostream>
#include"list.h"
using namespace std; 
int main()
{
    cout<<"开始创建链表,请输入链表大小"<<endl;
    cin>>n;
    Student* list=creat_list(n);
    cout<<"链表创建完毕,链表信息如下"<<endl;
    list_visit(list);
    cout<<"开始插入新成员"<<endl;
    Student* p=(Student *)malloc(sizeof(Student));
    p->name="cmy";p->age=20;
    insertelem(list,1,p);
    cout<<"插入后的链表信息如下"<<endl;
    list_visit(list);
    cout<<"删除1号成员后信息如下"<<endl;
    deleteelem(list,1);
    list_visit(list);
    cout<<"查诈rb同学是否存在链表"<<endl;
    searchelem(list,"rb");
    cout<<"修改tp同学信息后的链表信息"<<endl;
    Student *p1=(Student *)malloc(sizeof(Student));
    p1->name="tp";
    modifyelem(list,p1);
    list_visit (list);
    return 0;
}

  • 写回答

1条回答 默认 最新

  • 高项门外汉 2024-09-26 15:48
    关注

    链表在创建之初默认设置了没有存数据的头节点,在访问链表时,如果头节点不为空,并且要读写数据,第一个访问的应该是list->next

    评论

报告相同问题?

问题事件

  • 创建了问题 9月26日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?