elvisage 2015-03-29 02:08 采纳率: 0%
浏览 1880

数据结构 链表 插入出错

 #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。。。谢谢了!

  • 写回答

2条回答 默认 最新

  • 弦月春秋 2015-03-29 03:58
    关注

    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()时会越界,目测改正后能够正确插入一个元素吧;;
    另程序存在问题不少,需要好好锤炼一下

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?