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\n",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个座位\n",s);
      }
          return 0;
}

 

posted @ 2018-12-26 22:40  人不聪明,还学秃顶(绝顶聪明)  阅读(1728)  评论(0编辑  收藏  举报