WV.8-动态链表-升序链表数据

来源:互联网 发布:打数字软件 编辑:程序博客网 时间:2024/06/07 19:41
问题及代码:
/* *Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:words.cpp *作    者:单昕昕 *完成日期:2015年1月17日 *版 本 号:v1.0 * *问题描述:编写函数,使建立链表时,结点中的数据呈现升序。*程序输入:若干正数(以0或一个负数结束)建立链表。*程序输出:升序链表数据。*/  /**Copyright (c)2014,烟台大学计算机与控制工程学院*All rights reserved.*文件名称:words.cpp*作    者:单昕昕*完成日期:2015年1月17日*版 本 号:v1.0**问题描述:编写函数,删除链表中的第一个结点。*程序输入:若干正数(以0或一个负数结束)建立链表。*程序输出:删除链表中的第一个结点后的结果。*/#include  <iostream>using namespace std;struct Node{    int data;            //结点的数据    struct Node *next;  //指向下一结点};Node *head=NULL;    //将链表头定义为全局变量,以便于后面操作void make_list();   //建立链表void out_list();    //输出链表int main( ){    make_list();    out_list();    return 0;}void make_list(){    int n;    Node *t,*p,*q;  //p用于指向新建立的结点, q指向链表尾部    cout<<"输入若干正数(以0或一个负数结束)建立链表:";    cin>>n;    while(n>0)    {        t=new Node;        t->data=n;        t->next=NULL;        if(head==NULL)   //是空链表,p作为第一个结点即可            head=t;        else             //插入p结点后,各结点应该保持有序        {            if(n<=head->data)  //新加入的结点应该为首结点            {                t->next=head;                head=t;            }            //应该找到合适的位置后,将结点插入            //此时,链表中至少已经有一个结点,且插入结点不是首结点            else            {                p=head;                q=p->next;   //p与q相邻,p更靠近q,插入位置将在p和q之间                while(q!=NULL&&n>q->data)  //链表没有完且p结点比n小,一直往后找                {                    p=q;                    q=p->next;                }                if(q==NULL) //q为null,作为最后一个结点直接插入到p后即可                {                    p->next = t;                }                else   //t插入到p和q之间                {                    t->next=q;                    p->next=t;                }            }       }        cin>>n;    }    return;}void out_list(){    Node *p=head;    cout<<"链表中的数据为:"<<endl;    while(p!=NULL)    {        cout<<p->data<<" ";        p=p->next;    }    cout<<endl;    return;}



运行结果:




知识点总结:
升序链表数据。

学习心得:

好。。。复。。。杂。。。

0 0
原创粉丝点击