2014北理机试题

2014的第三题看起来比前两个还容易得多,就主要写写前两个吧

1.

系统中有最近打开文件的记录,先用整数表示打开的文件名,且只显示最近3个打开的文件,输出文件序列。

输入:1 输出: 1
输入:2 输出:2,1
输入:3 输出:3,2,1
输入:4 输出:4,3,2  
输入:1 输出:1,4,3  //由此行得出超过3个的文件被kill掉了,故需要重新打开
输入:4 输出:1,4,3  //未被kill则不改变顺序
输入:3 输出:1,4,3

数据结构使用链表

#include<iostream>
#include<vector>
#include<stack>
#include<map>
#include<list>
using namespace std;

int main()
{
	int t;
	list<int> li;
	list<int>::iterator it;
	bool exist;
	while (cin >> t) {  //ctrl+z  to  stop
		exist = false;
		for (it = li.begin(); it != li.end(); it++) {  //检查是否存在
			if (*it == t) {
				exist = true;
				break;
			}
		}
		if (!exist) {  //不存在时需要插入,但要先将超过三的部分删掉
			if (li.size() >= 3) {
				auto last = --li.end();
				li.erase(last);//删除最后一个元素
			}	
			li.insert(li.begin(), t);  //头插法
		}
		for (it = li.begin(); it != li.end(); it++)
			cout << *it << ' ';
		cout << endl;
	}
}

2.

系统中有最新打开文件的记录,先用整数表示打开的文件名,且只显示最近3个打开的文件,输出文件序列。

    输入:1 输出:1
    输入:2 输出:2,1
    输入:3 输出:3,2,1
    输入:4 输出:4,3,2
    输入:1 输出:1,4,3
    输入:4 输出:4,1,3 //显示了最新的顺序
    输入:3 输出:3,4,1

仍然使用链表结构

#include<iostream>
#include<vector>
#include<stack>
#include<map>
#include<list>
using namespace std;

int main()
{
	int t;
	list<int> li;
	list<int>::iterator it;
	bool exist;
	while (cin >> t) {  //ctrl+z  to  stop
		exist = false;
		for (it = li.begin(); it != li.end(); it++) {
			if (*it == t) {
				exist = true;
				break;
			}
		}
		if (!exist) {  //不存在时需要插入,但要先将超过三的部分删掉
			if (li.size() >= 3) {
				auto last = --li.end();
				li.erase(last);//删除最后一个元素
			}	
			li.insert(li.begin(), t);  //头插法
		}
		else {  //存在时先it指向的结点摘下,再头插
			li.erase(it);
			li.insert(li.begin(),t);
		}
		for (it = li.begin(); it != li.end(); it++)
			cout << *it << ' ';
		cout << endl;
	}
}

3.

求广义表的深度(括号匹配)
输入:(c,((d,e),f),h)
输出:3

按理说括号匹配要用栈,但有点大才小用了。
依次读入字符,用一个全局变量指示深度,遇(++,遇)--,最后输出最大值即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值