Description
编写一个函数creatlink,用来建立一个动态链表。(包含学号和成绩)
编写一个函数printlink,用来输出一个链表。
编写一个函数dellink,用来删除动态链表中一个指定的结点(由实参指定某一学号,表示要删除该学生结点)。
编写一个函数insertlink,用来向动态链表插入一个结点。
编写一个函数freelink,用来释放一个动态链表。
Input
输入多个学生的学号和成绩,建立动态链表,以0 0 结束
输入学号,删除链表中的对应结点
插入两个链表结点
Output
输出的链表
Sample Input
1001 1001002 951005 901008 760 010051006 981009 99
Sample Output
1001 100.001002 95.001006 98.001008 76.001009 99.00
HINT
#include <iostream>
#include <iomanip>
using
namespace
std;
struct
student
{
long
num;
float
score;
student *next;
};
student *creatlink(
void
)
{
student *head;
student *p1,*p2;
p1=p2=
new
student;
cin>>p1->num>>p1->score;
head=NULL;
//对head初始赋值
while
(p1->num!=0)
{
if
(head==NULL) head=p1;
//p1用于指向新开的节点
else
p2->next=p1;
//p2指向链表最后一个节点
p2=p1;
p1=
new
student;
cin>>p1->num>>p1->score;
}
p2->next=NULL;
return
head;
}
student *dellink(student *head,
long
del_num)
{
student *p1,*p2;
p1=head;
while
(p1->num!=del_num&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if
(p1->num == del_num)//找到了这个数
{
if
(p1==head) head=p1->next; //若是头结点,将头节点下一节点作为头结点
else
p2->next=p1->next;
}
return
head;
}
student *insertlink(student *head,student *std)
{
student *p2=head,*p1,*st=
new
student;
st->num=std->num;
st->score=std->score;
st->next=std->next;
while
(p2->next!=NULL)
{
if
(p2->num < st->num && st->num < p2->next->num) //如果插入的节点值介于 p2 和 p2->next 之间
{
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
printlink(student *head) //定义print函数
{
student *p;
p=head;
do
{
cout<<p->num<<
" "
<<p->score<<endl;
p=p->next;
}
while
(p!=NULL);
}
void
freelink(student *head) //释放一个动态链表
{
student *p2,*p1;
p1=head;
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;
}
/**************************************************************
Problem: 2430
User: 201358501133
Language: C++
Result: Accepted
Time:0 ms
Memory:1268 kb
****************************************************************/