/*
* 程序的版权和版本声明部分:
* 作 者:烟台大学计算机学院学生:段元晋
* 完成日期:2013年3月24日
* 版 本 号:vc++6.0
* 对任务及求解方法的描述部分:
* 输入描述:
* 问题描述:
* 程序输出:
* 问题分析:略
* 算法设计:略
*/
#include<iostream>
#define NULL 0
#include<iomanip>
using namespace std;
struct student
{
long num;
float score;
student *next;
};
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;
}
student *creatlink()
{
student *p,*s,*head;
head=NULL;
s=new student;
cin>>s->num>>s->score;
while((s->num!=0)&&(s->score!=0))
{
if(head==NULL)
head=s;
else
p->next=s;
p=s;
s=new student;
cin>>s->num>>s->score;
}
p->next=NULL;
delete s;
return (head);
}
void printlink(student *head)
{
student *p;
p=head;
if(head!=NULL)
{
do
{
cout<<p->num<<" "<<p->score<<endl;
p=p->next;
}while(p!=NULL);
}
}
student *insertlink(student *head,student *ss)
{
student *s,*p,*q;
s=new student;
s->num=ss->num;
s->score=ss->score;
s->next=NULL;
p=head;
if(head==NULL)
{
head=s;
s->next=NULL;
return (head);
}
else
{
while((s->num>p->num)&&(p->next!=NULL))
{
q=p;
p=p->next;
}
if(s->num<=p->num)
{
if(head==p)
{
head=s;
s->next=p;
}
else
{
s->next=p;
q->next=s;
}
}
else
{
p->next=s;
s->next=NULL;
}
return (head);
}
}
student *dellink(student *head,long delNum)
{
student *q,*p;
p=head;
if(head==NULL)
{
cout<<"该链表为空链表"<<endl;
return(head);
}
else
{
while((delNum!=p->num)&&(p->num!=NULL))
{
q=p;
p=p->next;
}
if(delNum==p->num)
{
if(head==p)
head=p->next;
else
q->next=p->next;
}
else
cout<<"没找到"<<endl;
return(head);
}
}
void freelink(student *p)
{
delete p;
}
运行结果