紫書例題6-4 UVa 11988 ( 連結串列
阿新 • • 發佈:2019-01-23
用陣列模擬連結串列 ,以前只用過指標模擬,陣列方便了不少啊
沒什麼好說的(不是很理解啊 先記錄一下唉2
/*一直不知道我HOME與end作用 所以一直沒有理解題意QAQ */
/* 題意就是隻要出現[]包圍的內容 就按照出現的順序扔到句子最前面 */
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
#define ll long long
#define N 1000000
const int mod = 1e9+7;
char str[N];
int step[N]; //定義next陣列表示str的下標
int last, cur; // cur為游標位置, last 為最後一個字元位置
int main()
{
while(~scanf("%s",str+1)) { //從s[1]輸入
int len = strlen (str+1);
last = cur = 0;
step[0] = 0; // 表示游標最開始在螢幕的最左邊
for(int i = 1;i <= len; i++) {
if(str[i] == '[')
cur = 0; //瞬間將游標移到最左邊
else if(str[i] == ']')
cur = last; //括號內內容結束
else {
step[i] = step[cur];
step[cur] = i;
printf("%d %d\n",step[cur],cur);
if(cur == last) last = i; //要更新最後一個字元的編號啊
cur = i; //移動游標
}
}
for(int i = step[0];i != 0; i = step[i]) {
printf("%d ",i);
}printf("\n");
for(int i = step[0];i != 0; i = step[i]) {
printf("%c",str[i]);
}
printf("\n");
}
return 0;
}