1. 程式人生 > >資料結構1800試題(第四章)

資料結構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分)】