• C语言链表头插法,尾插法,排序


    题目描述

    火车站要组装一列动车。每列车厢有车厢编号、座位数和座位等级。现在请你把它们组装起来,要求按照车厢号码升序排列,并输出每列车厢的信息。请使用链表来实现。

    输入

    输入有多组。

    每组有多行。第一行是个正整数n,表示车厢数目。接下来有n行数据,每行数据有3个值,分别是车厢编号、座位数和座位等级。

    输出

    输出该动车每列车厢的信息。安装后输入先输出的方式输出。

    样例输入

    3
    1 108 二等座
    3 108 二等座
    2 54 一等座
    3
    2 54 一等座
    1 108 二等座
    3 108 二等座
    

    样例输出

    车厢号:1,座位数:108,二等座
    车厢号:2,座位数:54,一等座
    车厢号:3,座位数:108,二等座
    该列车共有270个座位
    车厢号:1,座位数:108,二等座
    车厢号:2,座位数:54,一等座
    车厢号:3,座位数:108,二等座
    该列车共有270个座位

    #include<stdio.h>

    #include<stdlib.h>

    struct train{

        int no;

        int seat;

        char level[9];

    };

    struct node{

          struct train data;

          struct node *next;

    };

    //将结点q插入在以head为头指针的链表的头部

    struct node *insert_head(struct node *head ,struct node *q)

    {

            if(q != NULL)

            {

                  q->next = head;

                  head = q;

            }

         return head;

    }

     //将结点q插入在以head为头指针的链表的尾部

    struct node *insert_tail(struct node *head ,struct node *q)

            struct node *p = head;

            if(q != NULL)

           {

               while(p&&p->next)

               {

                  p = p->next;

               }

               if(head == NULL)

               {

                  q->next = head;

                  head =q;

                  p=q;

               }

               else 

               {

                    q->next = NULL;

                    p->next = q;

                    p=p->next;

               }

           }

            

    }

     //将新结点q插入在以head为头指针的链表中,并且要升序排列

    struct node *insert_order(struct node *head,struct node *q)

    {

           struct node *p = head;

           if(head == NULL)

           {

                 q ->next =head;

                 head =q;

                 return head;

           }

           if(p->data.no>q->data.no)

           {

                 q->next = head;

                 head = q;

                 return head;

           }

     //寻找插入位置p(新结点q要插入在p后)

          while(p->next != NULL && p->next->data.no<q->data.no)//若使用降序则p->next->data.no>q->data.no

          {

                p=p->next;

                q->next = p->next;

                p->next = q;

                return head;

          }

    }

    //历遍

    void print(struct node *head)

    {

           struct node *p = head;

           while(p != NULL)

           {

              printf("车厢号:%d,座位号:%d,%s ",p->data.no,p->data.seat,p->data.level);

              p = p->next;

           }

    }

     int main()

    {

          int n,s,i;

          struct node *head = NULL;

          struct node *p = NULL;

          struct node *q = NULL;

          

          while(scanf("%d",&n)!=EOF)
          {
                 head=NULL;
                 s=0;
                 for(i=0;i<n;i++)
                 {
                         q=(struct node *)malloc(sizeof(struct node));
                         scanf("%d %d %s",&q->data.no,&q->data.seat,q->data.level);
                         q->next=NULL;
                         s+=q->data.seat;
                         head=insert_order(head,q);
                 }

                 print(head);

                 printf("该列车共有%d个座位 ",s);
          }
              return 0;
    }

  • 相关阅读:
    自动发现
    1.1 开启二进制日志
    mysql
    html常见的块元素和行内元素(特别注意个别块元素不能嵌套其他块元素)
    Linux查看物理CPU个数、核数、逻辑CPU个数
    查看linux服务器的系统信息
    谷歌浏览器无法输入中文——解决
    Linux下查看正在使用的端口
    入园第三天-记录
    Visual Studio2015 Community一些必备插件
  • 原文地址:https://www.cnblogs.com/zy9535/p/10182333.html
Copyright © 2020-2023  润新知