为什么链表创建的结果会出乎我的意料
#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;
}