例题6-4 破损的键盘 UVa11988

该博客介绍了如何利用链表解决UVa11988竞赛题,通过建立Next数组表示字符关系,并使用变量cur和last管理光标和显示屏末尾,遇到'['和']'时调整头结点,实现输入字符串的正确显示。
摘要由CSDN通过智能技术生成

1.题目描述:点击打开链接

2.解题思路:本题利用链表解决。每输入一个字符,就把它存起来,设输入字符串是s[1...n],则可以用Next[i]表示在当前显示屏中s[i]右边的字符编号。为了便于后续处理,假设s的最前面还有一个虚拟的s[0](这是链表的常用处理方式,请务必牢记),那么Next[0]就表示显示屏中最左边的字符,再用一个变量cur表示光标位置:即当前光标位于s[cur]的右边(即我们的DOS窗口中经常出现的下一个待输入的位置)。cur=0说明光标位于s[0]的右边,即显示屏的最左边。为了移动光标,还需要一个变量last表示显示屏的最后一个字符是s[last]。

接下来考虑如何用链表来实现本题。最初我们需要一个头结点,不妨将它设为0,即Next[0]=0。头结点只是起到一个标记的作用,不表示真实的位置。链表中的头结点总是指向链表的第一个元素。然后开始插入元素。链表中插入元素就两句代码:Next[i]=head;head=i。第一句表示新元素i的下一个元素指向当前head指向的元素,第二句话是更新head的指向,指向新的第一个元素i。当所有元素插入完毕后,只需要从头结点开始,顺着Next数组即可按顺序输出整个链表。注意,这样的插入实际上是在尾部插入,链表的尾部在不断地变长。<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值