c语言链表排序新增头指针法,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

#include

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为头指针的链表的尾部

structnode *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.nodata.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;

structnode *p = NULL;

structnode *q = NULL;

while(scanf("%d",&n)!=EOF)

{

head=NULL;

s=0;

for(i=0;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;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值