首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

dele和insert函数 哪里有有关问题

2013-03-17 
dele和insert函数 哪里有问题引用#includeiostream#includestringusing namespace stdstruct Student

dele和insert函数 哪里有问题

引用
#include<iostream>
#include<string>
using namespace std;
struct Student
{
    string name;
    int num;
    Student *next;
};
Student *creat()
{
    Student *p1,*p2;
    Student *head;
    int n=0;
    p1=p2=new Student;
    cout<<"请输入学生信息"<<endl;
    cin>>p1->name>>p1->num;
    head=NULL;
    while(p1->num!=0)
    {
        n=n+1;
        if(n==1)
            head=p1;
        else
            p2->next=p1;
        p2=p1;
        p1=new Student;
        cin>>p1->name>>p1->num;
    }
    p2->next=NULL;
    return head;
}
Student *insert(Student *stu)
{
    Student *p,*p1,*head;
    cout<<"请输入你要插入的个人信息"<<endl;
    p=new Student;
    cin>>p->name>>p->num;
    head=stu;
    p1=stu->next;
    while(p1->next!=NULL)
    {
        if(p->num<=p1->num&&p->num>=stu->num)
        {
            stu->next=p;
            p->next=p1;
            break;
        }
        else
        {
            stu=stu->next;
            p1=p1->next;
        }
 
    }        return head;
}
Student *del(Student *stu)
{
    Student *head,*p,*dele;
    p=head=stu;
    dele=new Student;
    cout<<"请输入你要删除的学号"<<endl;
    cin>>dele->num;
    while(stu->next!=NULL)
    {
        if(stu->name!=dele->name)
        {
            p->next=stu;
            stu=stu->next;
        }
        else
        {
            p->next=stu->next;
            break;


        }
    }
    return head;
}
void Print(Student *p)
{
    do
    {
        cout<<p->name<<p->num<<endl;
        p=p->next;
    }while(p!=NULL);
}
int main()
{
    Student *p;
    p=creat();
    Print(p);
    p=insert(p);
        Print(p);
    p=del(p);
        Print(p);
        return 0;
}

dele和insert函数 哪里有有关问题插入失败 输入要删除的学号 后 就不运行了 怎么解决啊
[解决办法]
删除时要判num而不是name。还要考虑被删的是否head等。试修改如下:
    cout<<"请输入你要删除的学号"<<endl;
    cin>>dele->num;
    while(stu!=NULL) //while(stu->next!=NULL)
    {
        if(stu->num!=dele->num)//if(stu->name!=dele->name)
        {
            p=stu; //p->next=stu;
            stu=stu->next;
        }
        else
        {
            if (stu == head)//加
            {
                head = stu->next;//加
            }
            else
            {
                p->next = stu->next;
            }
            delete stu;//加
            break;
        }
    }

[解决办法]
不要ele=new Student;
只要定义num即可:int num;

Student *del(Student *stu)
{
    Student *head,*p;//删,*dele;
    int num;//加
    p=head=stu;
    //删dele=new Student;
    cout<<"请输入你要删除的学号"<<endl;
    cin>>num;//cin>>dele->num;
    while(stu!=NULL) //while(stu->next!=NULL)
    {
        if(stu->num!=num)//if(stu->name!=dele->name)
        {
            p=stu; //p->next=stu;
            stu=stu->next;


        }
        else
        {
            if (stu == head)//加
            {
                head = stu->next;//加
            }
            else
            {
                p->next = stu->next;
            }
            delete stu;//加
            break;
        }
    }
    return head;
}

热点排行