编写一个函数creatlink,用来建立一个动态链表。(包含学号和成绩)
编写一个函数printlink,用来输出一个链表。
编写一个函数dellink,用来删除动态链表中一个指定的结点(由实参指定某一学号,表示要删除该学生结点)。
编写一个函数insertlink,用来向动态链表插入一个结点。
编写一个函数freelink,用来释放一个动态链表。
编写一个函数creatlink,用来建立一个动态链表。(包含学号和成绩)
编写一个函数printlink,用来输出一个链表。
编写一个函数dellink,用来删除动态链表中一个指定的结点(由实参指定某一学号,表示要删除该学生结点)。
编写一个函数insertlink,用来向动态链表插入一个结点。
编写一个函数freelink,用来释放一个动态链表。
输入多个学生的学号和成绩,建立动态链表,以0 0 结束
输入学号,删除链表中的对应结点
插入两个链表结点
输出的链表
1001 100 1002 95 1005 90 1008 76 0 0 1005 1006 98 1009 99
1001 100.00 1002 95.00 1006 98.00 1008 76.00 1009 99.00
#include <iostream>
#include <iomanip>
#define NULL 0
using namespace std;
struct student
{
int num;
double score;
student *next;
};
int n;
student *creatlink(void)
{
student *head,*p1,*p2;
p1=p2=new student;
cin>>p1->num>>p1->score;
head=NULL;
n=0;
while(p1->num!=NULL)
{
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);
}
void printlink(student *head)
{
student *p;
p=head;
if(head!=NULL)
do
{
cout<<p->num<<" "<<p->score<<endl;
p=p->next;
}while(p!=NULL);
}
/*void printlink(student *p)
{
if(p==NULL)
return ;
cout<<p->num<<" "<<p->score<<endl;
printlink(p->next);
return ;
}*/
student *dellink(student *head,long num)
{
student *p1,*p2;
p1=head;
while(num!=p1->num&&p1->next!=NULL)
{
p2=p1;
p1=p1->next;
}
if(num==p1->num)
{
if(p1==head)
head=p1->next;
else p2->next=p1->next;
n=n-1;
}
return (head);
}
student *insertlink(student *head,student *stud)
{
student *p0,*p1,*p2;
p1=head;
p0=new student; //关键所在!!!
*p0=*stud;
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++;
return (head);
}
void freelink(student *p)
{ student *t;
if(p->next ==NULL)
{
delete p; //只有一个节点
return ;
}
t=p->next;
p->next=t->next; //摘除节点t
delete t;
freelink(p);
}
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;
}
链表建立,插入,删除,输出,释放,布布扣,bubuko.com
原文:http://blog.csdn.net/u013629228/article/details/21950025