第十八周项目1-5:升序建立链表

来源:互联网 发布:网络做兼职是真的吗 编辑:程序博客网 时间:2024/06/18 07:13
问题及代码:
/**Copyright (c)2014,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:test.cpp*作者:陈文青*完成日期:2015年1月28日*版 本 号:v1.0**问题描述:编写make_list3()函数建立链表,使建立链表时,使结点中的数据呈现升序。*程序输入:*程序输出:*/#include  <iostream>using namespace std;struct Node{    int data;             //结点的数据    struct Node *next;    //指向下一结点};Node *head=NULL;          //将链表头定义为全局变量,以便于后面操作void out_list();          //输出链表void make_list3();        //链表升序建立int main( ){    make_list3();    cout<<"升序排序后,";    out_list();    return 0;}void out_list(){    Node *p=head;    cout<<"链表中的数据为:"<<endl;    while(p!=NULL)    {        cout<<p->data<<" ";        p=p->next;    }    cout<<endl;    return;}void make_list3(){    int n;    Node *p,*q,*t;    cout<<"输入若干正数(以0或一个负数结束)建立链表:"<<endl;    cin>>n;    while(n>0)                  //输入若干正数建立链表,输入非正数时,建立过程结束    {        p=new Node;             //新建结点        p->data=n;        p->next=NULL;           //新建的结点指向原先的链表头        if(head==NULL)            head=p;             //链表头赋值为新建的节点        else        {            if (n<=head->data)  //如果输入的n比链表头小,将n设置为首结点            {                p->next=head;                head=p;            }            else            {                q=head;                t=q->next;                while (t!=NULL&&n>t->data)//如果n比上一个结点大,挨个向下找                {                    q=t;                    t=q->next;                }                if (t==NULL)    //如果是最后一个结点,插入                {                    q->next=p;                }                else            //不停向下找到合适的位置后,插入结点                {                    p->next=t;                    q->next=p;                }            }        }        cin>>n;    }    return;}

运行结果:



知识点总结:
升序建立链表

学习心得:
在建立链表时,一定要用纸笔画出链表的建立过程,这样利于掌握链表,并且建立出所需链表


0 0
原创粉丝点击