链表的创建,删除,插入,显示 *** 作。以学生的学号,成绩为例

链表的创建,删除,插入,显示 *** 作。以学生的学号,成绩为例,第1张

链表的创建,删除,插入,显示 *** 作。


以学生的学号,成绩为例

#include
using namespace std;
struct student
{
    int num;
    int score;
    student*next;
};
int n;//用来计数
student*creat()
{
    student*head,*p1,*p2;
    head=NULL;//头节点赋值
    n=0;
    p1=p2=new student;
    cout<<"请输入学生的学号与成绩,退出学号请输入0";
    cin>>p1->num>>p1->score;//输入信息
    while(p1->num!=0){//判断输入的信息是否有效
        n=n+1;//计数的变化
        if(n==1) {
            head=p1;//头节点赋值
        }
        else {
            p2->next=p1;//连接起整个链表点
        }
        p2=p1;//储存
        p1=new student;//开辟新空间
        cin>>p1->num>>p1->score;//信息输入
    }
    p2->next=NULL;//无效退出
    return (head); 
}
 struct student*del(struct student*head,int num)
{
    struct student *p1,*p2;
    if(head==NULL)
    {
        cout<<"空列表";
        return NULL;
    }//特殊情况
    p1=head;
    while(num!=p1->num&&p1->next!=NULL)
    {
        p2=p1;
        p1=p1->next;
    }//没找到节点,循环
    if(p1->num==num) //找到节点
    {
        if(num==head->num)//头节点
            head=head->next;
            else
            p2->next=p1->next;
            n=n-1;
    }
    else
    cout<<"没找到";
    return head;
}
 struct student*insert(struct student*head,student*stu)
{
    student*p0,*p1,*p2;
    p1=head;
    p0=stu;
    if(head==NULL)
    {
        head=p0;
        p0->next=NULL;//空链表
    }
    else
    {
        while((p0->num>p1->num)&&(p1->next!=NULL))//中间
        {
            p2=p1;
            p1=p1->next;
        }//没找到插入点的情况
        if(p0->num<=p1->num)//找到后
        {
            if(head==p1)//头节点
            head=p0;
            else
            p2->next=p0;
            p0->next=p1;//插入后
        }
        else//末尾
        {
            p1->next=p0;
            p0->next=NULL;
        }
        n=n+1;
        return (head);
    }
    
}
void print(student*head)
{
    student*p;
    p=head;
    while(p!=NULL)
    {
        cout<num<<" "<score<         p=p->next;
    }
}
int main()
{
    student *head,stu;
    head=creat( );
    print(head);//打印
    cout<<"请输入删除的学生号码";
    int dnum;
    cin>>dnum;
    head=del(head,dnum);
    print(head);
    cout<<"请输入插入的学生信息";
    cin>>stu.num>>stu.score;
    head=insert(head,&stu);
    print(head);
    return 0;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/607516.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-14
下一篇 2022-04-14

发表评论

登录后才能评论

评论列表(0条)

保存