链表有2个储存单位,一个是数据存储单位value[maxn],一个是指示存储单位next[maxn],数据存储单位保存值,而next存储数据的顺序,每个next中存储的值即是下一个值所对应的next[i]中i的值,i的值对应value中数据的存储位置。
示例代码如下:
#include<cstdio> #include<cstring> const int maxn=100005; char s[maxn]= {0}; ///储存输入文本 int cur,last,next[maxn]= {0}; ///记录文本位置 int main() { while(~scanf("%s",s+1)) { int n=strlen(s+1); last=cur=0; next[0]=0;///给所有位置初始化 for(int i=1; i<=n; i++) { char ch=s[i]; if(ch=='[') cur=0;///如果是[,则将光标调到0,进行位置交换 else if(ch==']') cur=last;///如果是],则光标移动到最后 else { printf("%d ",next[i]); printf("%c %c\n",s[next[i]],s[next[cur]]); next[i]=next[cur];///当cur==0时,第i个数和第0位的数交换位置,此时next[i]=0,之后由于有cur=i,所以此式中next[cur]恒为0 next[cur]=i; printf("%d ",next[i]); printf("%c %c\n",s[next[i]],s[next[cur]]); if(cur==last)///当cur==last时,由于先前的空格被推到了第i位,后面交换则是跟第i位数交换 last=i; cur=i; } } for(int i=next[0]; i!=0; i=next[i]) ///通过链表输出,经过替换之后,s[0]存储的是] printf("%c",s[i]); printf("\n"); } return 0; }
浙公网安备 33010602011771号