首页 > 专题系列 > C基础练习 > C语言程序设计-列车排队[链表应用]
2013
12-18

C语言程序设计-列车排队[链表应用]

k2031 列车排队

Description

有若干节列车车厢,每节车厢都有固定的编号,车厢逐个进入站台编组成一列列车(车厢进入站台顺序与车厢编号无关),请你用链表模拟组成的列车,并分别完成以下功能。

1)在主函数中读入数据并创建列车链表。

2) 用函数实现,按输入顺序打印出所有的车厢号(各号之间有一位空格分隔)。

3)用函数实现,统计出组成列车中共有多少节车厢。

4) 用函数实现,按输入顺序的逆序打印出所有车厢号。

Input

输入为一行整数,表示车厢编号(编号为大于0的整数),最后一个整数为0,表示输入数据结束,并且0不是车厢编号不处理。

Output

输出为2行整数(完成选作为3行),第一行为按输入顺序输出的各节车厢的编号,第二行为列车长度,第三行为按输入顺序的逆序输出的各节车厢的编号。

Sample Input

5 3 8 1 7 10 15 2 0

Sample Output

  5 3 8 1 7 10 15 2

  8

  2 15 10 7 1 8 3 5

 

链表正序没什么说的。倒序输出用的是递归,由于这里这里还没有学习双向链表。借助数组又是另一回事了

#include"stdio.h"
#include"string.h"
#include"stdlib.h"

struct Car {
	int num;
	struct Car *next;
};
void show(struct Car * head) {
	while (head) {
		printf("%d  ", head->num);
		head = head->next;
	}
}

void count(struct Car * head) {
	int sum = 0;
	while (head) {
		sum++;
		head = head->next;

	}
	printf("%d ", sum);
}

void order(struct Car * head) {

	if (head == NULL)
		return;
	order(head->next);
	printf("%d ", head->num);

}

int main() {
	struct Car *head, *p, *low;
	int n = 0;
	low = p = (struct Car *) malloc(sizeof(struct Car));
	scanf("%d", &p->num);
	head = NULL;
	while (p->num != 0) {
		n++;
		if (n == 1)
			head = p;
		else
			low->next = p;
		low = p;
		p = (struct Car *) malloc(sizeof(struct Car));
		scanf("%d", &p->num);

	}

	low->next = NULL;
	show(head);
	puts("");//换行
	count(head);
	puts("");//换行
	order(head);
	return 0;
}

 


  1. Gucci New Fall Arrivals

    This is really nice to know. I hope it will be successful in the future. Good job on this and keep up the good work.