关于双端队列的一个问题(哪位能帮忙讲讲啊,谢谢)

huaostrich 2004-11-22 12:45:23
设有一个双端队列,元素进入该队列的顺序是1、2、3、4。试分别求出满足下列条件的输出序列
1)能由输入受限的双端队列得到,但不能由输出受限的双端队列得到的输出序列;
2)能由输出受限的双端队列得到,但不能由输入受限的双端队列得到的输出序列;
3)既不能由输入受限的双端队列得到,又不能由输出受限的双端队列得到的输出序列。
...全文
285 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
sailor_Song 2005-01-30
  • 打赏
  • 举报
回复
顶一下啊,
yangsongx 2004-11-23
  • 打赏
  • 举报
回复
用STL中的deque模板类就可以解决了吧?》
Leaveye 2004-11-22
  • 打赏
  • 举报
回复
输入1234:
double_queue_enter_limited(QE): 输入受限队列:<---> [ ][p2][p3][p4] -->
double_queue_delete_limited(QD):输出受限队列:<---> [ ][p2][p3][p4] <--
可能的输出:p1,p2,p3,p4。

推论一:很容易看出,若输入只有三个数123,则QE和QD能做出所有3!种序列。

推论二:若p1<=3,则p1出队后,队里最多有两个元素,
而由上述结论可以看出剩下的三个数的所有序列QE和QD都能做出来(相当于做三个数的序列)。
故只可能是4开头的序列QE和QD做不出来,
也就是说在p2,p3,p4出来之前他们已经在队里了(如上图)。

QE只有一个入口,可见q2=3,q3=2,q1=1, 所以QE做不出的有4213和4231,
即中间的数(2)先出。
QD只有一个出口,他能做出的序列必已经在队里摆好(然后才能在出口端顺序出来),
而QD靠入队操作在队里摆不出的序列,一定是把后入队的元素放在先入队的两个元素的中间,
即不能把3放在1和2的中间,故QD做不出来的序列有4132和4231。

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧