青少年软件编程(C语言)等级考试试卷(六级)
1、
链表去重
给定一个带整数键值的链表 L,你需要把其中绝对值重复的键值结点删掉。即对每个键值 K,只有第一个绝对值等于 K 的结点被保留。同时,所有被删除的结点须被保存在另一个链表上。例如给定 L 为 21→-15→-15→-7→15,你需要输出去重后的链表 21→-15→-7,还有被删除的链表 -15→15。
时间限制:5000
内存限制:65536
输入
输入在第一行给出 L 的第一个结点的地址和一个正整数 N(≤ 10
5
,为结点总数)。一个结点的地址是非负的 5 位整数,空地址 NULL 用 -1 来表示。 随后 N 行,每行按以下格式描述一个结点: 地址 键值 下一个结点 其中`地址`是该结点的地址,`键值`是绝对值不超过10
4
的整数,`下一个结点`是下个结点的地址。
输出
首先输出去重后的链表,然后输出被删除的链表。每个结点占一行,按输入的格式输出。
样例输入
00100 5
99999 -7 87654
23854 -15 00000
87654 15 -1
00000 -15 99999
00100 21 23854
样例输出
00100 21 23854
23854 -15 99999
99999 -7 -1
00000 -15 87654
87654 15 -1
2、
简单计算器
本题要求你为初学数据结构的小伙伴设计一款简单的利用堆栈执行的计算器。计算器由两个堆栈组成,一个堆栈 S
1
存放数字,另一个堆栈 S
2
存放运算符。计算器的最下方有一个等号键,每次按下这个键,计算器就执行以下操作:
- 1. 从 S
1
中弹出两个数字,顺序为 n
1
和 n
2
;
- 2. 从 S
2
中弹出一个运算符 op;
- 3. 执行计算 n
2
op n
1
;
- 4. 将得到的结果压回 S
1
。
直到两个堆栈都为空时,计算结束,最后的结果将显示在屏幕上。
时间限制:7000
内存限制:65536
输入
输入首先在第一行给出正整数 N(1 < N ≤ 10
3
),为 S
1
中数字的个数。 第二行给出 N 个绝对值不超过 100 的整数;第三行给出 N-1 个运算符 —— 这里仅考虑 `+`、`-`、`*`、`/` 这四种运算。一行中的数字和符号都以空格分隔。
输出
将输入的数字和运算符按给定顺序分别压入堆栈 S
1
和 S
2
,将执行计算的最后结果输出。注意所有的计算都只取结果的整数部分。题目保证计算的中间和最后结果的绝对值都不超过 10
9
。 如果执行除法时出现分母为零的非法操作,则在一行中输出:`ERROR: X/0`,其中 `X` 是当时的分子。然后结束程序。
样例输入
样例1:
5
40 5 8 3 2
/ * - +
样例2:
5
2 5 8 4 4
* / - +
样例输出
样例1:
2
样例2:
ERROR: 5/0
3、
两头进一头出
某队列允许在其两端进行入队操
2024 年12 月 C语言等级考试 6级真题