数组链表-----uva11988

下面是:有关链表的插入操作:


首先,插入的概念是:破坏两个物体之间的联系,在两个物体之间插入第三个物体。


例如:1------->2(1与2相连),我要在中间插入3,则要先破坏链接:1---x--->2,然后1---->3----->2。


下面以uva的11988为例说明:

#include<cstdio>
#include<cstring>
const int maxn = 100000 + 5;
int last, cur, next[maxn]; // 光标位于cur号字符之后面
char s[maxn];

int main() {
  while(scanf("%s", s+1) == 1) {
    int n = strlen(s+1); // 输入保存在s[1], s[2]...中
    last = cur = 0;
    next[0] = 0;

    for(int i = 1; i <= n; i++) {
      char ch = s[i];
      if(ch == '[') cur = 0;
      else if(ch == ']') cur = last;
      else {
       <span style="color:#ff0000;"> next[i] = next[cur];
        next[cur] = i;</span>
        if(cur == last) last = i; // 更新“最后一个字符”编号
        cur = i; // 移动光标
      }
    }
    for(int i = next[0]; i != 0; i = next[i])
      printf("%c", s[i]);
    printf("\n");
  }
  return 0;
}

这里的next数组是关系数组,每一个next[i]记录着它要指向哪一个字符的位置。

这里详细说明红色字体的代码,这就是插入的概念。

两句代码是(用最上面的例子说明):先然next[3]这个关系指向next[1]所指向的关系,也就是next[2],然后再让next[1]指向next[3],从而让关系重新建立。(这里的代码有一个小技巧是:直接赋值,不需要再用一个变量存储,代码简洁)

这里的关系next[]的值是指向字符的下标。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值