c++链表 建立 输入 输出 删除结点 插入结点 释放链表 的函数

来源:互联网 发布:淘宝易信 编辑:程序博客网 时间:2024/05/22 01:29

Description

编写一个函数creatlink,用来建立一个动态链表。(包含学号和成绩)
编写一个函数printlink,用来输出一个链表。
编写一个函数dellink,用来删除动态链表中一个指定的结点(由实参指定某一学号,表示要删除该学生结点)。
编写一个函数insertlink,用来向动态链表插入一个结点。
编写一个函数freelink,用来释放一个动态链表。

Input

输入多个学生的学号和成绩,建立动态链表,以0 0 结束
输入学号,删除链表中的对应结点
插入两个链表结点

Output

输出的链表

#include<iostream> #include<iomanip> using namespace std;/********************************************************/struct student {     long num;     float score;     student *next; };/********************************************************/ student *creatlink(void)//建立链表 {     student *st=new student,*pend,*head;//申请内存空间     cin>>st->num>>st->score;//输入学生信息     head=NULL;    while(st->num!=0)//当输入0 0时结束    {         if(head==NULL)             head=st;//head起个头         else            pend->next=st;//指向下一个结点的地址        pend=st;        st=new student;//重新申请内存地址        cin>>st->num>>st->score;     }     pend->next=NULL;     delete st;//把多申请的那个释放     return head;//返回首地址,千万别改}/********************************************************/ void printlink(student *head)//链表输出 {     while(head!=NULL)     {         cout<<head->num<<" "<<head->score<<endl;         head=head->next;     } }/********************************************************/ student *dellink(student *head,long del)//删除 {     student *p1,*p2=head;     while(p2!=NULL)    {                      if(del==p2->num)         {             p1->next=p2->next;//上一个的next指向被删除结点的下一个地址//也就是上一个的next的值换成下一个next的值            break;         }         else        {             p1=p2;             p2=p2->next;         }     }     return head; }/********************************************************/ student *insertlink(student *head,student *std)//插入 {     student *p2=head,*p1,*st=new student;//一定要申请新的内存地址     st->num=std->num;//把值赋给st就可以了,别赋地址    st->score=std->score;     st->next=std->next;     while(p2->next!=NULL)     {         if(p2->num<st->num&&st->num<p2->next->num)//简单的排一下序        {             p1=p2->next;             p2->next=st;             st->next=p1;             return head;//插进去了就退出吧        }         else            p2=p2->next;     }     if(p2->next==NULL)//当在最后插入结点时            {         p2->next=st;         st->next=NULL;//别忘了    }     return head; }/********************************************************/ void freelink(student *head)//释放链表{     student *p1=head,*p2;     while(p1!=NULL)//排着释放    {         p2=p1->next;         delete p1;         p1=p2;     } }/********************************************************/ int main() {     student *creatlink(void);     student *dellink(student *,long);     student *insertlink(student *,student *);     void printlink(student *);     void freelink(student *);     student *head,stu;     long del_num;     head=creatlink();     cin>>del_num;     head=dellink(head,del_num);     cin>>stu.num>>stu.score;     head=insertlink(head,&stu);     cin>>stu.num>>stu.score;     head=insertlink(head,&stu);     cout<<setiosflags(ios::fixed);     cout<<setprecision(2);     printlink(head);     freelink(head);     return 0; }/*Sample Input1001 1001002 951005 901008 760 010051006 981009 99Sample Output1001 100.001002 95.001006 98.001008 76.001009 99.00*/ 

0 0
原创粉丝点击