编写一个函数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