#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
struct LNode{
string name;
string sex;
int age;
LNode *next;
};
LNode *students;
void InitList(LNode *list){
list=(LNode *)malloc(sizeof(LNode));
list->next=NULL;
}
int GetAge(LNode *list,int i){
LNode *p;
p=list;
int j;
int Age;
Age=p->age;
for(j=2;j<=i;j++){
p=p->next;
Age=p->age;
}
return Age;
}
int GetNextAge(LNode *list,int i){
LNode *p;
p=list;
int j;
int NextAge;
NextAge=p->age;
for(j=2;j<=i+1;j++){
p=p->next;
NextAge=p->age;
}
return NextAge;
}
void HeadInsert(LNode *list,string name1,string sex1,int age1){
LNode *p;
p=list;
LNode *s;
s=(LNode *)malloc(sizeof(LNode));
s->name=name1;
s->sex=sex1;
s->age=age1;
s->next=p;
list=s;
}
void ListInsert(LNode *list,string name1,string sex1,int age1,int j){
LNode *p;
p=list; //指向同一地址 *p=*list 指针复制 地址不一定一样
int i;
for(i=1;i<j;i++){
p=p->next;
} //找到第j个节点 p为指向第j个节点的指针
LNode *s;
s=(LNode *)malloc(sizeof(LNode));
s->name=name1;
s->sex=sex1;
s->age=age1;
if(p->next){
s->next=p->next;
}
p->next=s;
}
void Insert(LNode *list,string name1,string sex1,int age1){
int i,Age,NextAge;
i=1;
while(1){
Age=GetAge(list,i);
if(age1<Age){
HeadInsert(list,name1,sex1,age1);
break;
}
if(GetNextAge(list,i)){
NextAge=GetNextAge(list,i);
}
else{
ListInsert(list,name1,sex1,age1,i+1);
break; //nextage不存在 插在最后 跳出循环
}
if((age1<NextAge) && (Age<age1)){
Insert(list,name1,sex1,age1);
break;
}
i=i+1;
}
}
void Display(LNode *list){
LNode *p;
p=list;
while(p){
cout<< (p->name) << "\n" << (p->sex) << "\n" << (p->age) << "\n\n";
p=p->next;
}
}
int main(){
InitList(students);
string name;
string sex;
name="abc";
sex="male";
int age=1;
ListInsert(students,name,sex,age,1);
Display(students);
}
这是我们的数据结构的实验作业
编译没有出错但是在测试ListInsert操作的时候显示已停止运行 也不知道错在哪
希望大神们能帮忙找找bug。。。谢谢了!