2 beingvague beingvague 于 2016.03.02 06:17 提问

一道C++读取文件,动态数组和自定义指令的题目,有什么最优解答?

读取123.txt,里面含有以下几种指令:
ADD_F ADD_B REMOVE_F REMOVE_B RESULT
开始要求创建一个空数组
例如
ADD_F 2 3 5:在数组开头增加2 3 5
ADD_B 3 5 6:在数组结尾增加3 5 6
REMOVE_F 3:删掉数组头3个数字
REMOVE_B 2:删掉数组后2个数字
RESULT:输出当前数组

例子
ADD_F 1 2 3
ADD_B 5 6 7
RESULT
1 2 3 5 6 7
REMOVE_F 2
REMOVE_B 2
RESULT
3 5

6个回答

caozhy
caozhy   Ds   Rxr 2016.03.02 08:05

就你的问题来说,最好的做法是双向循环链表。

beingvague
beingvague 谢谢,很有帮助!
接近 2 年之前 回复
caozhy
caozhy   Ds   Rxr 2016.03.02 08:13
WinsenJiansbomber
WinsenJiansbomber   2016.03.02 09:33

这个题有趣,相当于在做汇编程序,基本思想是这样的。

jianwen0529
jianwen0529   Rxr 2016.03.02 09:50

std::list

WinsenJiansbomber
WinsenJiansbomber   2016.03.02 13:03

其實這没什么什么很深的算法学问啊,基本的解题思路如下:

  • 实现数据读取,分行处理就行;
  • 按伪指令要求实现数组的操作函数;
  • 实现伪指令字符的判断,如果伪指令数量巨多,那么可以考虑使用映射表来实现伪指令到相应操作函数的快速定位;
  • 依次处理每一行数据

如果伪指令还需要中间指定位位置插入,那在数据量不多的前提下用一般的数组结结构加一点数组分割重组的代码就可以了。
但是大量数据的情况下就不能这样做了,十分高耗,按caozhy提议用链表更佳。

bjay
bjay   2016.03.02 13:34

flex和bison能够很好地处理这个问题。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!