#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。。。谢谢了!
void ListInsert(LNode *list,string name1,string sex1,int age1,int j){
LNode *p;
p=list; //指向同一地址 *p=*list 指针复制 地址不一定一样
int i;
for(i=1;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;
}
初看了一下,没有时间运行了,在ListInsert()等函数后需要添加s->next = NULL,否则display()时会越界,目测改正后能够正确插入一个元素吧;;
另程序存在问题不少,需要好好锤炼一下
程序
#include <iostream>
#include <string>
using namespace std;
typedef struct LNode{
char *name;
char *sex;
int age;
struct LNode *next;
}LNode,*LinkList;
void InitList(LinkList *list){
(*list)=(LinkList)malloc(sizeof(LNode));
(*list)->next=NULL;
}
void ListInsert(LinkList list,char *name1,char *sex1,int age1,int j){
if(!list)
return;
LinkList p,s;
p=list;
s=(LinkList)malloc(sizeof(LNode));
s->next=NULL;
s->age=age1;
s->name=name1;
s->sex=sex1;
for(int i=1;i<j;++i)
p=p->next;
p->next=s;
}
void Display(LinkList list){
LinkList p;
p=list->next;
while(p){
cout<< (p->age) << endl
<< (p->sex) << endl
<< (p->name) << endl;
p=p->next;
}
}
int main(){
LinkList students;
InitList(&students);
char *name="abc";
char *sex="male";
int age=12;
ListInsert(students,name,sex,age,1);
Display(students);
}
结果
12
male
abc
请按任意键继续. . .