题意:
输入一串字符串,将其中[]中的字符放到字符串最开头,再输入得到的字符串
要点:
使用静态链表,也就是利用两个数组,还挺难的,主要是一个插入操作以及要设一个last来表示当前的最后字符。
代码如下:
#include<stdio.h>
#include<string.h>
#define maxn 100050
int main()
{
int cur, last, next[maxn];//next数组用来存储静态链表的下标
char s[maxn];
while (scanf("%s", s + 1) !=EOF)//为了方便多设一个s[0],相当于头指针
{
int n = strlen(s+1);
cur = last = 0;//last用来存储当前输出的最后一个字符
next[0] = 0;
for (int i = 1; i <= n; i++)
{
char ch = s[i];
if (ch == '[') //遇到[下标就指向0,将下一个放到最开始
cur = 0;
else if (ch == ']')//[]中last与cur不相等,last还是之前的最后一个
cur = last;//但]后last要指向]后一个了
else
{
next[i] = next[cur];//就是静态链表的插入操作
next[cur] = i;
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;
}