1. 程式人生 > >紫書例題6-4 UVa 11988 ( 連結串列

紫書例題6-4 UVa 11988 ( 連結串列

用陣列模擬連結串列 ,以前只用過指標模擬,陣列方便了不少啊
沒什麼好說的(不是很理解啊 先記錄一下唉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; }