關於UVa11988的兩種寫法

2022-07-24 02:15:11 字數 1653 閱讀 2340

本題是劉汝佳紫書上的一道例題而已,書上給出的是陣列模擬鍊錶的寫法。具體方法是,先用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,即在最後乙個元...