首页 > 其他 > 详细

链表建立,插入,删除,输出,释放

时间:2014-03-24 20:55:11      阅读:488      评论:0      收藏:0      [点我收藏+]

Problem C: C语言习题 链表建立,插入,删除,输出

 

Description

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

Input

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

Output

输出的链表

Sample Input

1001 100
1002 95
1005 90
1008 76
0 0
1005
1006 98
1009 99

Sample Output

1001 100.00
1002 95.00
1006 98.00
1008 76.00
1009 99.00

HINT

#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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!