資料結構1800試題(第四章)
第四章 串
一、選擇題
1.下面關於串的的敘述中,哪一個是不正確的?( )【北方交通大學 2001 一、5(2分)】
A.串是字元的有限序列 B.空串是由空格構成的串
C.模式匹配是串的一種重要運算 D.串既可以採用順序儲存,也可以採用鏈式儲存
2 若串S1=‘ABCDEFG’, S2=‘9898’ ,S3=‘###’,S4=‘012345’,執行
concat(replace(S1,substr(S1,length(S2),length(S3)),S3),substr(S4,index(S2,‘8’),length(S2)))
其結果為( )【北方交通大學 1999 一、5 (25/7分)】
A.ABC###G0123 B.ABCD###2345 C.ABC###G2345 D.ABC###2345
E.ABC###G1234 F.ABCD###1234 G.ABC###01234
3.設有兩個串p和q,其中q是p的子串,求q在p中首次出現的位置的演算法稱為( )
A.求子串 B.聯接 C.匹配 D.求串長
【北京郵電大學 2000 二、4(20/8分)】【西安電子科技大學 1996 一、1 (2分)】
4.已知串S=‘aaab’,其Next陣列值為( )。【西安電子科技大學 1996 一、7 (2分)】
A.0123 B.1123 C.1231 D.1211
5.串 ‘ababaaababaa’ 的next陣列為( )。【中山大學 1999 一、7】
A.012345678999 B.012121111212 C.011234223456 D.0123012322345
6.字串‘ababaabab’ 的nextval 為( )
A.(0,1,0,1,04,1,0,1) B.(0,1,0,1,0,2,1,0,1)
C.(0,1,0,1,0,0,0,1,1) D.(0,1,0,1,0,1,0,1,1 )
【北京郵電大學 1999 一、1(2分)】
7.模式串t=‘abcaabbcabcaabdab’,該模式串的next陣列的值為( ),nextval陣列的值為 ( )。
A.0 1 1 1 2 2 1 1 1 2 3 4 5 6 7 1 2 B.0 1 1 1 2 1 2 1 1 2 3 4 5 6 1 1 2
C.0 1 1 1 0 0 1 3 1 0 1 1 0 0 7 0 1 D.0 1 1 1 2 2 3 1 1 2 3 4 5 6 7 1 2
E.0 1 1 0 0 1 1 1 0 1 1 0 0 1 7 0 1 F.0 1 1 0 2 1 3 1 0 1 1 0 2 1 7 0 1
【北京郵電大學 1998 二、3 (2分)】
8.若串S=’software’,其子串的數目是( )。【西安電子科技大學 2001應用 一、2(2分)】
A.8 B.37 C.36 D.9
9.設S為一個長度為n的字串,其中的字元各不相同,則S中的互異的非平凡子串(非空且不同於S本身)的個數為( )。【中科院計算所 1997 】
A.2n-1 B.n2 C.(n2/2)+(n/2) D.(n2/2)+(n/2)-1 E. (n2/2)-(n/2)-1 F.其他情況
10.串的長度是指( )【北京工商大學 2001 一、6 (3分)】
A.串中所含不同字母的個數 B.串中所含字元的個數
C.串中所含不同字元的個數 D.串中所含非空格字元的個數
二、判斷題
1.KMP演算法的特點是在模式匹配時指示主串的指標不會變小。( )【北京郵電大學 2002 一、4 (1分)】
2.設模式串的長度為m,目標串的長度為n,當n≈m且處理只匹配一次的模式時,樸素的匹配(即子串定位函式)演算法所花的時間代價可能會更為節省。( )【長沙鐵道學院 1998 一、1 (1分)】
3.串是一種資料物件和操作都特殊的線性表。( )【大連海事大學 2001 1、L (1分)】
二、填空題
1.空格串是指__(1)__,其長度等於___(2)__。 【西安電子科技大學 2001軟體 一、4(2分)】
2.組成串的資料元素只能是________。 【中山大學 1998 一、5 (1分)】
3.一個字串中________稱為該串的子串 。 【華中理工大學 2000 一、3(1分)】
4.INDEX(‘DATASTRUCTURE’, ‘STR’)=________。【福州大學 1998 二、4 (2分)】
5.設正文串長度為n,模式串長度為m,則串匹配的KMP演算法的時間複雜度為________。
【重慶大學 2000 一、4】
6.模式串P=‘abaabcac’的next函式值序列為________。【西安電子科技大學 2001軟體 一、6(2分)】
7.字串’ababaaab’的nextval函式值為________。 【北京郵電大學 2001 二、4 (2分)】
8.設T和P是兩個給定的串,在T中尋找等於P的子串的過程稱為__(1)__,又稱P為__(2)__。
【西安電子科技大學 1998 二、5 (16/6分)】
9.串是一種特殊的線性表,其特殊性表現在__(1)__;串的兩種最基本的儲存方式是__(2)__、__(3)__;兩個串相等的充分必要條件是__(4)__。 【中國礦業大學 2000 一、3 (4分)】
10.兩個字串相等的充分必要條件是_______。 【西安電子科技大學 1999軟體 一、1 (2分)】
11.知U=‘xyxyxyxxyxy’;t=‘xxy’;
ASSIGN(S,U);
ASSIGN(V,SUBSTR(S,INDEX(s,t),LEN(t)+1));
ASSIGN(m,‘ww’)
求REPLACE(S,V,m)= ________。 【東北大學 1997 一、1 (5分)】
12.實現字串拷貝的函式 strcpy為:
void strcpy(char *s , char *t) /*copy t to s*/
{ while (________)
} 【浙江大學 1999 一、5 (3分)】
13.下列程式判斷字串s 是否對稱,對稱則返回1,否則返回0;如 f("abba")返回1,f("abab")返回0;
int f((1)________)
{int i=0,j=0;
while (s[j])(2)________;
for(j--; i<j && s[i]==s[j]; i++,j--);
return((3)_______)
} 【浙江大學 1999 一、6 (3分)】
14.下列演算法實現求採用順序結構儲存的串s和串t的一個最長公共子串。
程式(a)
PROCEDURE maxcomstr(VAR s,t : orderstring; VAR index,length : integer);
VAR i,j,k,length1:integer; con:boolean;
BEGIN
index :=0; length :=0; i :=1;
WHILE(i<=s.len) DO
[j:=1;
WHILE (j<=t.len) DO
[ IF (s[i]=t[j]) THEN
[ k:=1; length1:=1; con:=true;
WHILE con DO
IF (1)__THEN [length1:=length1+1;k:=k+1;] ELSE(2) _;
IF (length1>length) THEN [index:=i; length:=length1; ]
(3)____;
]
ELSE (4)____;
]
(5) ___;
]
END;
程式(b)
void maxcomstr(orderstring *s,*t; int index, length)
{int i,j,k,length1,con;
index=0;length=0;i=1;
while (i<=s.len)
{j=1;
while(j<=t.len)
{ if (s[i]= =t[j])
{ k=1;length1=1;con=1;
while(con)
if (1) _ { length1=length1+1;k=k+1; } else (2) __;
if (length1>length) { index=i; length=length1; }
(3)____;
}
else (4) ___;
}
(5) __
} } 【上海大學 2000 一、2 (10分)】
15.完善演算法:求KMP演算法中next陣列。
PROC get _next(t:string,VAR next:ARRAY[1..t.len] OF integer);
BEGIN
j:=1; k:=(1)__; next[1]:=0;
WHILE j<t.len DO
IF k=0 OR t.ch[j]=t.ch[k] THEN BEGIN j:=j+1; k:=k+1; next[j]:=k;END
ELSE k:=(2)___;
END;
【中山大學 1998 四、1 (4分)】
16.下面函式index用於求t是否為s的子串,若是返回t第一次出現在s中的序號(從1開始計),否則返回0。
例如:s=‘abcdefcdek’,t=‘cde’,則indse(s,t)=3, index(s,’aaa’)=0 。已知t,s的串長分別是mt,ms
FUNC index(s,t,ms,mt);
i:=1;j:=1;
WHILE (i<ms) AND (j<mt) DO
IF s[i]=t[j] THEN [ (1)__; (2)__]
ELSE [ (3)___; (4)_ ]
IF j>mt THEN return (5)____; ELSE return (6)__
ENDF;
【南京理工大學 1999 三、2 (6分)】
17.閱讀下列程式說明和pascal程式,把應填入其中的( )處的字句寫在答題紙上。
程式說明:
本程式用於判別輸入的字串是否為如下形式的字串:
W&M$ 其中,子字串M是子字串W的字元反向排列,在此假定W不含有字元&和字元$,字元&用作W與M的分隔符,字元$用作字串的輸入結束符。
例如,對輸入字串ab&ba$、11&12$、ab&dd$、&$,程式將分別輸出Ok.(是),No.(不是)。
程式
PROGRAM accept(input,output);
CONST midch=’&’; endch=’$’;
VAR an:boolean; ch:char;
PROCEDURE match(VAR answer: boolean);
VAR ch1,ch2:char; f:boolean;
BEGIN
read(ch1);
IF ch1<>endch
THEN IF (1)__
THEN BEGIN match(f);
IF f THEN BEGIN read(ch2); answer:=(2)_ END ELSE answer:=false
END
ELSE (3)___
ELSE (4)___
END;
BEGIN
writeln(‘Enter String:’);
match(an);
IF an THEN BEGIN
(5)__ IF (6)_ THEN writeln(‘Ok.’) ELSE writeln(‘No.’)
END
ELSE writeln(‘No.’)
END. 【上海海運學院 1998 七 (15分)】
18.試利用下列棧和串的基本操作完成下述填空題。
initstack(s) 置s為空棧;
push(s,x) 元素x入棧;
pop(s) 出棧操作;
gettop(s) 返回棧頂元素;
sempty(s) 判棧空函式;
setnull(st) 置串st為空串;
length(st) 返回串st的長度;
equal(s1,s2) 判串s1和s2是否相等的函式;
concat(s1,s2) 返回聯接s1和s2之後的串;
sub(s,i,1) 返回s中第i個字元;
empty(st) 判串空函式
FUNC invert(pre:string; VAR exp:string):boolean;
{若給定的表示式的字首式pre正確,本過程求得和它相應的表示式exp並返回“true”,否則exp為空串,並返回“false”。已知原表示式中不包含括弧,opset為運算子的集合。}
VAR s:stack; i,n:integer; succ:boolean; ch: char;
BEGIN
i:=1; n:=length(pre); succ:=true;
(1)__; (2)__;
WHILE (i<n) AND succ DO
BEGIN ch:=sub(pre,i,l);
IF (3)_ THEN (4)__
ELSE IF (5)__THEN (6)_
ELSE BEGIN
exp:=concat((7)___,(8)____);
exp:=concat((9)___,(10)___);
(11)__;
END;
i:=i+1
END;
IF (12)___THEN
BEGIN exp:=concat(exp,sub(pre,n,1)); invert:=true END
ELSE BEGIN setnull(exp); invert:=false END
END;
注意:每個空格只填一個語句。 【清華大學 1996 八】
四、應用題
1.名詞解釋:串 【大連海事 1996 一、10 (1分) 】【河海大學 1998 二、5(3分)】
2.描述以下概念的區別:空格串與空串。【大連海事大學 1996 三、2、(1) (2分)】
3.兩個字串S1和S2的長度分別為m和n。求這兩個字串最大共同子串演算法的時間複雜度為T(m,n)。估算最優的T(m,n),並簡要說明理由。 【北京工業大學 1996 一、5 (6分)】
4.設主串S=‘xxyxxxyxxxxyxyx’,模式串T=‘xxyxy’。請問:如何用最少的比較次數找到T在S中出現的位置?相應的比較次數是多少? 【大連海事大學 2001 四 (8分)】
5.KMP演算法(字串匹配演算法)較Brute(樸素的字串匹配)演算法有哪些改進?【大連海事大學1996三、1((2分)】
6.已知模式串t=‘abcaabbabcab’寫出用KMP法求得的每個字元對應的next和nextval函式值。
【北京郵電大學 1997 三 (10分)】
7.給出字串‘abacabaaad’在KMP演算法中的next和nextval陣列。【北京郵電大學 2000 三、1(5分)】
8.令t=‘abcabaa’,求其next 函式值和nextval函式值。 【北方交通大學 1994 一 (6分)】
9.已知字串‘cddcdececdea’,計算每個字元的next和nextval函式的值。【南京郵電大學 2000 一 2】
10.試利用KMP演算法和改進演算法分別求p1=‘abaabaa’和p2=‘aabbaab’的next函式和nextval函式。
【東南大學 1999 一、6(8分)】
11.已知KMP串匹配演算法中子串為babababaa,寫出next陣列改進後的next陣列資訊值(要求寫出陣列下標起點)。【西南交通大學 2000 二、2】
12.求模式串T=‘abcaabbac' 的失敗函式Next(j)值。【西安交通大學 1996 四、4 (5分)】
13.字串的模式匹配KMP演算法中,失敗函式(NEXT)是如何定義的?計算模式串p=‘aabaabaaabc’中各字元的失敗函式值.【石油大學 1998 一、2 (10分)】
14.設字串S=‘aabaabaabaac',P=‘aabaac'
(1)給出S和P的next值和nextval值;
(2)若S作主串,P作模式串,試給出利用BF演算法和KMP演算法的匹配過程。
【北方交通大學1998二(15分)】
15.設目標為t=‘abcaabbabcabaacbacba’,模式為p=‘abcabaa’
(1)計算模式p的naxtval函式值;(5分)
(2)不寫出演算法,只畫出利用KMP演算法進行模式匹配時每一趟的匹配過程。(5分)
【清華大學 1998 八(10分)】
16.模式匹配演算法是在主串中快速尋找模式的一種有效的方法,如果設主串的長度為m,模式的長度為n,則在主串中尋找模式的KMP演算法的時間複雜性是多少?如果,某一模式 P=’abcaacabaca’,請給出它的NEXT函式值及NEXT函式的修正值NEXTVAL之值。【上海交通大學 2000 一 (5分)】
17.設目標為S=‘abcaabbcaaabababaabca’,模式為P=‘babab’,
(1)手工計算模式P的nextval陣列的值;(5分)
(2)寫出利用求得的nextval陣列,按KMP演算法對目標S進行模式匹配的過程。 (5分)
【清華大學 1997 四(10分)】
18.用無回溯的模式匹配法(KMP法)及快速的無回溯的模式匹配法求模式串T的next[j]值,添入下面表中:
j |
1 2 3 4 5 6 7 |
t |
a a b b a a b |
kmp法求得的next[j]值 |
|
快速無回溯法求得的next[j]值 |
【北京郵電大學 1992 三、1(25/4分)】
19.在改進了的(無回溯)字串模式匹配中,要先求next陣列的值。下面是求nextval值的演算法。
TYPE SAR=ARRAY[1..m] OF INTEGER;
PTY=ARRAY[1..m] OF CHAR;
PROCEDURE next2(P:PTY;VAR NEXTVAL:SAR);
{在模式P中求nextval陣列的值}
1 BEGIN
2 J:=1;NEXTVAL[1]:=0;K:=0
3 REPEAT
4 IF (K=0) OR (P[J]=P[K])
5 THEN [ J:=J+1;K:=K+1;
6 IF P[J]=P[K]
7 THEN NEXTVAL[J]:=NEXTVAL[K]
8 ELSE NEXTVAL[J]:=K ]
9 ELSE K:=NEXTVAL[K]
10 UNTIL J=m
11 END;
演算法中第4行有P[J]=P[K],第六行中也有P[J]=P[K]。兩處比較語句相同。請分析說明此兩處比較語句的含義是什麼?分析此演算法在最壞情況下的時間複雜度是多少?【北京郵電大學 1993 二、2(6分)】
20.在字串模式匹配的KMP演算法中,求模式的next陣列值的定義如下:
next[j]=
請問:
(1)當j=1時,為什麼要取next[1]=0?
(2)為什麼要取max{K},K最大是多少?
(3)其它情況是什麼情況,為什麼取next[j]=1? 【北京郵電大學 1994 二(8分)】
21.給出KMP演算法中失敗函式f的定義,並說明利用f進行串模式匹配的規則,該演算法的技術特點是什麼?
【東南大學 1993 一、3 (9分) 1997 一、2 (8分) 2001 一、6 (6分)】
22. 在模試匹配KMP演算法中所用失敗函式f的定義中,為何要求p1p2……pf(j)為p1p2……pj兩頭匹配的真子串?且為最大真子串? 【東南大學 1996 一、3(7分)】
23.如果兩個串含有相等的字元,能否說它們相等?【西安電子科技大學 2000軟體 一、3 (5分)】
24.設S1,S2為串,請給出使S1//S2=S2//S1成立的所有可能的條件(//為連線符)。
【長沙鐵道學院 1997 三、5 (3分)】【國防科技大學 1999 一 】
25.已知:s ='(xyz)+*',t ='(x+z)*y'。試利用聯結、求子串和置換等基本運算,將 s 轉化為 t 。
【北方交通大學 1996 一、3(5分)】【山東科技大學 2002 一、6 (5分)】
第五部分、演算法設計
1.設s、t為兩個字串,分別放在兩個一維陣列中,m、n分別為其長度,判斷t是否為s的子串。如果是,輸出子串所在位置(第一個字元),否則輸出0。(注:用程式實現)【南京航空航天大學 1997 九(10分)】
2.輸入一個字串,內有數字和非數字字元,如:ak123x456 17960?302gef4563,將其中連續的數字作為一個整體,依次存放到一陣列a中,例如123放入a[0],456放入a[1],… … 。程式設計統計其共有多少個整數,並輸出這些數。【上海大學 1998 一 (13分)】
3. 以順序儲存結構表示串,設計演算法。求串S中出現的第一個最長重複子串及其位置並分析演算法的時間複雜度。【東南大學 2000 五 (15分)】
類似本題的另外敘述有:
(1)如果字串的一個子串(其長度大於1)的各個字元均相同,則稱之為等值子串。試設計一演算法,輸入字串S,以“!”作為結束標誌。如果串S中不存在等值子串,則輸出資訊“無等值子串”,否則求出(輸出)一個長度最大的等值子串。
例如:若S=“abc123abc123!”,則輸出“無等值子串”;若S=“abceebccadddddaaadd!”,則輸出“ddddd”。
【華中科技大學 2001】
4.假設串的儲存結構如下所示,編寫演算法實現串的置換操作。【清華大學 1995 五(15分)】
TYPE strtp =RECORD
ch: ARRAY[1..maxlen] OF char;
curlen:0..maxlen
END;
5.函式void insert(char*s,char*t,int pos)將字串t插入到字串s中,插入位置為pos。請用c語言實現該函式。假設分配給字串s的空間足夠讓字串t插入。(說明:不得使用任何庫函式)
【北京航空航天大學 2001 六 (10分)】
6.設計一個二分檢索的演算法,在一組字串中找出給定的字串,假設所有字串的長度為4。
(1)簡述演算法的主要思想;(3分)
(2)用PASCAL語言分別對演算法中用到的型別和變數作出說明;(3分)
(3)用類PASCAL語言或自然語言寫演算法的非遞迴過程; (8分)
(4)分析該演算法的最大檢索長度;(3分)
(5)必要處加上中文註釋。(3分)
【山東工業大學 1995 八 (20分)】
7.設計一PASCAL 或C語言的函式 atoi(x).其中X 為字串,由0--9十個數字元和表示正負數的‘-’組成,返回值為整型數值 。【浙江大學 1994 二 (7分)】
8.已知字串S1中存放一段英文,寫出演算法format(s1,s2,s3,n),將其按給定的長度n格式化成兩端對齊的字串S2, 其多餘的字元送S3。 【首都經貿大學 1998 三、8(15分)】
9.串以靜態儲存結構儲存,結構如下所述,試實現串操作equal演算法.
CONST maxlen=串被確認的最大長度
TYPE strtp=RECORD
ch:ARRAY[1..maxlen] OF char;
curlen:0..maxlen
END;
(以一維陣列存放串值,並設指示器curlen指示當前串長)【北京輕工業大學 1998 一 (12分)】
10.編寫程式,統計在輸入字串中各個不同字元出現的頻度並將結果存入檔案(字串中的合法字元為A-Z這26個字母和0-9這10個數字)。【西北大學 2000 四 (10分)】
11.寫一個遞迴演算法來實現字串逆序儲存,要求不另設串儲存空間。 【西南交通大學 2000 三、2】
12.已知三個字串分別為s=’ab…abcaabcbca…a’,s’=’caab’, s’’=’bcb’。利用所學字串基本運算的函式得到結果串為:s’’’=’caabcbca…aca…a’,要求寫出得到上結果串S’’’所用的函式及執行演算法。【東北大學 1998 一、1 (10分)】
13.S=“S1S2…Sn”是一個長為N的字串,存放在一個數組中,編程式將S改造之後輸出:
(1)將S的所有第偶數個字元按照其原來的下標從大到小的次序放在S的後半部分;
(2)將S的所有第奇數個字元按照其原來的下標從小到大的次序放在S的前半部分;
例如:
S=‘ABCDEFGHIJKL’
則改造後的S為‘ACEGIKLJHFDB’。【中科院計算所 1995】
14.編一程式,對輸入的一表達式(字串),輸出其TOKEN表示。表示式由變數A,B,C,常數(數字)0,1,…,9,運算子+,*和括號“(”,“)”組成。首先定義符號的類碼:
符號 |
變數 |
常量 |
* |
+ |
( |
) |
類碼 |
0 |
1 |
2 |
3 |
4 |
5 |
其次定義符號的TOKEN表示:
其中NAMEL是變數名錶(不允許有相同名),CONST是常量表(不允許有相同數)。
例如,假設有表示式(A+A*2)+2*B*3#,則將生成如下TOKENL:
【吉林大學 1995 一 (20分)】