阅读背景:

动态链表节点的创建、插入、删除。

来源:互联网 

动态链表

此仅为一个简单是的动态单链表,至于循环链表和双向链表以后更新。
#include <iostream>#include<iomanip>using namespace std;struct student//定义结构体变量;{    long int num;    double score;    student *next;};student *creatlink()//创建链表节点{    student *p1,*p2,*p3,*head=NULL;//初始化头指针;    p1=new student;//动态申请内存,    cin>>p1->num>>p1->score;//输入结构体中的内容(为了好以0 0结束创建节点)    if(p1->num!=0&&p1->score!=0)    {        head=p1;        while(p1->num!=0&&p1->score!=0)//判断是不是0 0;        {            p2=new student;//再次申请内存。            p1->next=p2;            p3=p1;            cin>>p2->num>>p2->score;//输入数据            p1=p2;        }        p3->next=NULL;//尾指针置空。    }    else        head=NULL;    return head;}student *dellink(student *head,long m){    student *p=head,*p1;    while(p!=NULL)    {        if((p->num==m)&&(p==head))//如果要删除的节点在头上。        {            head=p->next;            break;        }        else if((p->num==m)&&(p->next==NULL))//删除的节点在结尾        {            p=NULL;        }        else        {            if(p->num!=m)//要删的节点在中间时判断是否是要删的节点            {                p1=p;                p=p->next;            }            else            {                p1->next=p->next;                break;            }        }    }    return head;}student *insertlink(student *head,student *stu){    student *p,*p1,*p3,*p2;    p=head;	p2=new student;//申请动态内存,为了将新的节点地址变化(如果不变第二次插入式会出错)	//cout<<p2<<endl;	p2->num=stu->num;//赋值,(也可以用结构体直接赋值)	p2->score=stu->score;	p2->next=stu->next;    p1=p2;    if(head==NULL)//判断链表是否为空    {        head=p1;        p1->next=NULL;    }    else    {        while(p->next->next!=NULL)        {            if((p->num<=p1->num)&&(p->next->num>=p1->num))//判断是否是要插入的位置(此处要求输入是按升序输入的,插入时按升序插入)            {                p3=p->next;                p->next=p1;                p1->next=p3;                break;            }            p=p->next;        }		//cout<<p->next->next<<endl;		if((p->num<=p1->num)&&(p->next->num>=p1->num))//由于判断结束的标志是p->next->next,所以还有两组数据还没比较。		{			p3=p->next;			p->next=p1;			p1->next=p3;		}       else if(p->next->num<=p1->num)        {            p->next->next=p1;            p1->next=NULL;        }    }    return head;}void printlink(student *head){    student *p=head;    while(p->next!=NULL)    {        cout<<p->num<<" "<<p->score<<endl;        p=p->next;    }    cout<<p->num<<" "<<p->score<<endl;}void freelink(student *head){    student *p=head,*p1;    while(p!=NULL)    {        p1=p->next;//存储下一个指针的内容        delete(p);//释放p的内存        p=p1;    }    delete(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;}#



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: