本題是劉汝佳紫書上的一道例題而已,書上給出的是陣列模擬鍊錶的寫法。具體方法是,先用cur去記錄當前的游標位置,然後如果沒有遇到"["或者"]"就更新鍊錶中的元素,如果遇到了"["就跳轉至游標0處進行處理。如果遇到了"]"就跳轉至cur2,即遇到"["之前的游標位置然後繼續處理。更新鍊錶就是讓當前字元指向的下乙個為0,意思是下乙個為空(在當前狀態暫且這麼認為),然後上乙個元素指向當前元素。然後輸出就按照鍊錶陣列記錄的順序輸出即可。
**如下:
#include
#include
#include
usingnamespacestd;
chars[100005];
intcur = 0;
intnext1[100005];
intcur2;
intmain()
elseif(s[i]=='[')
elseif(s[i]==']')
}
for(inti = next1[0];i!=0; i = next1[i])
printf("%c",s[i]);
printf("\n");
}
return0;
}
但是,上課的時候老師講了另外一種方法,那就是用雙向陣列deque去做。
方法是,用乙個字串tmp去儲存字元,如果遇到的字元不是"["或者"]",那就塞入tmp中,如果遇到了"[",那就把tmp從首端塞入deque再清空tmp,如果是遇到"]"就從尾部塞入deque再清空tmp。如果是最後乙個字元的話,那就同樣分情況。"["就從首端塞入,其他的就尾端塞入。
**如下:
#include
#include
#include
#include
#include
usingnamespacestd;
dequedq;
string tmp,s;
intmain()
else
tmp+=s[i];
if(i==s.size()-1)
}
while(!dq.empty())
puts("");
}
return0;
}
兩種方法還是有區別的,模擬鍊錶只能乙個字元乙個字元地輸出,而deque是一段一段輸出。且處理方式也是不同的,前者是按照鍊錶順序輸出,後者是利用乙個tmp字串去模擬緩衝區,然後再根據"["和"]"去模擬輸出位置。
破損的鍵盤(uva 11988)
給你一段按鍵的文字,其中 表示home鍵,表示end鍵,輸出這段悲劇的文字。思路 使用鍊錶來模擬,遇到home鍵,就將後邊的文字插入到這段文字的最前邊,遇到 end鍵,就插入到這段文字的最後邊。但是用鍊錶會用到指標,過程比較繁瑣。這裡用乙個 next陣列模擬指向,next i 表示當前顯示屏中s i...
UVA 11988 破損的鍵盤
題目大意 從鍵盤輸入一行字串,但是由於鍵盤上的home 首 鍵和end 尾 鍵壞了,有時會自動按下這兩個鍵,所以打出的字串是混亂的。輸入 共包含多組資料,每組資料佔一行,輸入的每行字串,是從鍵盤按下去的每乙個鍵,其中 代表home鍵,代表end鍵 例 this is a beiju text 注 輸...
UVA11988破損的鍵盤(悲劇文字)
1.虛擬結點,從s 1開始輸入,字串長度也從s 1開始計算 2.next i next cur 大致是把下乙個字元的位置設為0 next cur i是將cur與i連線起來,相當於在cur後插入i,即cur i 3.遇到 時,令cur 0,即在0後插入元素 遇到 時,令cur last,即在最後乙個元...