數(shù)據(jù)結(jié)構(gòu)(C語言版)第三四章_第1頁
數(shù)據(jù)結(jié)構(gòu)(C語言版)第三四章_第2頁
數(shù)據(jù)結(jié)構(gòu)(C語言版)第三四章_第3頁
數(shù)據(jù)結(jié)構(gòu)(C語言版)第三四章_第4頁
數(shù)據(jù)結(jié)構(gòu)(C語言版)第三四章_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、 數(shù)據(jù)結(jié)構(gòu)(C語言版)第三四章習 題答案 第3章 棧和隊列 習題 1選擇題 (1)若讓元素1,2,3,4,5依次進棧,則出棧次序不可能出現(xiàn)在( )種情況。 A5,4,3,2,1 B2,1,5,4,3 C4,3,1,2,5 D2,3,5,4,1 (2)若已知一個棧的入棧序列是1,2,3,n,其輸出序列為p1,p2,p3,pn,若p1=n,則pi為( )。 n-i B i A 不確定n-i+1C D)數(shù)組用來表示一個循環(huán)隊列,(3為隊尾元素為當前隊列頭元素的前一位置,計算隊假定隊列中元素的個數(shù)小于,的位置, 。列中元素個數(shù)的公式為( )(n+f-r)%n r-f A B-f)%n n+r-f DC

2、n+r(指向棧4(top(data,link))鏈式棧結(jié)點為:,若想摘除棧頂結(jié)點,并將刪除結(jié)點的值保存.頂 到x中,則應執(zhí)行操作( )。 Ax=top-data;top=top-link; Btop=top-link;x=top-link; Cx=top;top=top-link; Dx=top-link; (5)設(shè)有一個遞歸算法如下 int fact(int n) /n大于等于0 if(n=0) return 1; else return n*fact(n-1); 則計算fact(n)需要調(diào)用該函數(shù)的次數(shù)為( )。 A n+1 B n-1 C n D n+2 (6)棧在 ( )中有所應用。

3、A遞歸調(diào)用 B函數(shù)調(diào)用 C表達式求值 D前三個選項都有 (7)為解決計算機主機與打印機間速度不匹配問題,通常設(shè)一個打印數(shù)據(jù)緩沖區(qū)。主機將要輸出的數(shù)據(jù)依次寫入該緩沖區(qū),而打印機則依次從該緩沖區(qū)中取出數(shù)據(jù)。該緩沖區(qū)的邏輯結(jié)構(gòu)應該是( )。 棧B 列隊A C 線性表 D有序表 (8)設(shè)棧S和隊列Q的初始狀態(tài)為空,元素e1、e2、e3、e4、e5和e6依次進入棧S,一個 元素出棧后即進入Q,若6個元素出隊的序列是e2、e4、e3、e6、e5和e1,則棧S的容量至少應該是( )。 A2 B3 C4 D 6 (9)在一個具有n個單元的順序棧中,假設(shè)以地址高端作為棧底,以top作為棧頂指針,則當作進棧處理時

4、,top的變化為( )。 Atop不變 Btop=0 Ctop- Dtop+ (10)設(shè)計一個判別表達式中左,右括號是否配對出現(xiàn)的算法,采用( )數(shù)據(jù)結(jié)構(gòu)最佳。 A線性表的順序存儲結(jié)構(gòu) B隊列C. 線性表的鏈式存儲結(jié)構(gòu) 棧D. 在進行刪除運(用鏈接方式存儲的隊列,11) )算時( 。 針指頭改修僅A. B. 僅修改尾指針 C. 頭、尾指針都要修改 要修改指針可能都D. 頭、尾 中,則入A0.m(12)循環(huán)隊列存儲在數(shù)組 隊時的操作為( )。rear=rear+1 A. B. rear=(rear+1)%(m-1) rear=(rear+1)%m C. D. rear=(rear+1)%(m+1

5、) 隊尾指針是n的循環(huán)隊列,(13)最大容量為 front,隊頭是,則隊空的條件是( )。rear(rear+1)%n=front A. B. rear=front rear+1=front CD. (rear-l)%n=front 。)棧和隊列的共同點是(14 )(出 進先先A. 都是 都是先進后出B. 元素和點許在端處插入刪除允C. 只 沒有共同點D. )。 15()一個遞歸算法必須包括( 分部歸遞A. B. 終止條件和遞歸部分 C. 迭代部分 終止條件和迭代部分D. )回文是指正讀反讀均相同的字符序列,(2”abdba”均是回文,但“good如“abba”和“試寫一個算法判定給定的字符向

6、量是不是回文。) (提示:將一半字符入棧否為回文。 根據(jù)提示,算法可設(shè)計為: 以下為順序棧的存儲結(jié)構(gòu)定義 / #define StackSize 100 / 假定預分配的棧空間最多為100個元素 typedef char DataType;/假定棧元素的數(shù)據(jù)類型為字符typedef struct DataType dataStackSize; int top; SeqStack; int IsHuiwen( char *t) 0 1,否則返回字符向量是否為回文,若是,返回 /判斷tSeqStack s; int i , len; char temp; InitStack( &s); len=s

7、trlen(t); /求向量長度 for ( i=0; ilen/2; i+)/ 將一半字符入棧Push( &s, ti); while( !EmptyStack( &s) / 每彈出一個字符與相應字符比較 temp=Pop (&s); if( temp!=Si) return 0 ;/ 不等則返回0 else i+; return 1 ; / 比較完畢均相等則返回 1 (3)設(shè)從鍵盤輸入一整數(shù)的序列:a, a, 21a,a,試編寫算法實現(xiàn):用棧結(jié)構(gòu)存儲輸n3入的整數(shù),當a-1時,將a進棧;當a=-1時,iii輸出棧頂整數(shù)并出棧。算法應對異常情況(入棧滿等)給出相應的信息。 #define m

8、axsize ??臻g容量 void InOutS(int smaxsize) /s是元素為整數(shù)的棧,本算法進行入棧和退棧操作。 int top=0; /top為棧頂指針,定義top=0時為???。 for(i=1; i=n; i+) /n個整數(shù)序列作處理。 scanf(“%d”,&x); /從鍵盤讀入整數(shù)序列。 讀入的整數(shù)不 if(x!=-1) / 等于-1時入棧。 if(top=maxsize-1)printf(“棧滿n”);exit(0);else s+top=x; /x 入棧。 else /讀入的整數(shù)等于-1時退棧。 if(top=0)printf(“??課”);exit(0); else

9、 printf(“出棧元素是%dn”,stop-); /算法結(jié)束。 (4)從鍵盤上輸入一個后綴表達式,試編寫算法計算表達式的值。規(guī)定:逆波蘭表達式的長度不超過一行,以$符作為輸入結(jié)束,操作數(shù)之間用空格分隔,操作符只可能有+、-、*、/四種運算。例如:234 34+2*$。 題目分析逆波蘭表達式(即后綴表達式)求值規(guī)則如下:設(shè)立運算數(shù)棧OPND,對表達式從左到右掃描(讀入),當表達式中掃描到數(shù)時,壓入OPND棧。當掃描到運算符時,從OPND退出兩個數(shù),進行相應運算,結(jié)果再壓入OPND棧。這個過程一直進行到讀出表達式結(jié)束符$,這時OPND 棧中只有一個數(shù),就是結(jié)果。 float expr( ) /

10、從鍵盤輸入逆波蘭表達式,以$表示輸入結(jié)束,本算法求逆波蘭式表達式的值。 float OPND30; / OPND是操作數(shù)棧。 init(OPND); /兩棧初始化。 float num=0.0; /數(shù)字初始化。 scanf (“%c”,&x);/x是字符型變量。 while(x!=$) switch case0=x=0&x=0&xj)printf(“序列非法ifexit(0); ,O是I或Aii+; /不論 指針i均后移。;”)(j!=k) ifprintf(“序列非法nreturn(false); ;printf(“ else 序列合)n”法return(true); 算法結(jié)束。 /和在入棧

11、出棧序列(即由I算法討論 O(入棧次數(shù)組成的字符串)的任一位置,I的O的個數(shù))都必須大于等于出棧次數(shù)(即 個數(shù)),否則視作非法序列,立即給出信息,退出算法。整個序列(即讀到字符數(shù)組中字符串的結(jié)束標記0),入棧次數(shù)必須等于出棧次 數(shù)(題目中要求棧的初態(tài)和終態(tài)都為空),否則視為非法序列。 假設(shè)以帶頭結(jié)點的循環(huán)鏈表表示隊列,并且)(6只設(shè)一個指針指向隊尾元素站點(注意不設(shè)頭指針) ,試編寫相應的置空隊、判隊空 、入隊和出隊等算法。 算法如下: /先定義鏈隊結(jié)構(gòu): typedef struct queuenode Datatype data; struct queuenode *next; Queue

12、Node; /以上是結(jié)點類型的定義 typedef struct queuenode *rear; LinkQueue; /只設(shè)一個指向隊尾元素的指針 (1)置空隊 void InitQueue( LinkQueue *Q) /置空隊:就是使頭結(jié)點成為隊尾元素 QueueNode *s; 將隊尾指針指向頭結(jié)點Q-rear = Q-rear-next;/ while (Q-rear!=Q-rear-next)/當隊列非空,將隊中元素逐個出隊 s=Q-rear-next; Q-rear-next=s-next; free(s); /回收結(jié)點空間 (2)判隊空 int EmptyQueue( Lin

13、kQueue *Q) /判隊空 /當頭結(jié)點的next指針指向自己時為空隊 return Q-rear-next-next=Q-rear-next; (3)入隊 void EnQueue( LinkQueue *Q, Datatype x) /入隊 /也就是在尾結(jié)點處插入元素 QueueNode *p=(QueueNode *) malloc (sizeof(QueueNode);/申請新結(jié)點 p-data=x; p-next=Q-rear-next;/初始化新結(jié)點并鏈入 Q-rear-next=p; 將尾指針移至新結(jié)點 Q-rear=p;/ (4)出隊 Datatype DeQueue( Li

14、nkQueue *Q) 把頭結(jié)點之后的元素摘下出隊,/ Datatype t; QueueNode *p; if(EmptyQueue( Q ) Error(Queue underflow); p=Q-rear-next-next; /p指向?qū)⒁碌慕Y(jié)點 x=p-data; /保存結(jié)點中數(shù)據(jù) if (p=Q-rear) /當隊列中只有一個結(jié)點時,p結(jié)點出隊后,要將隊尾指針指向頭結(jié)點 Q-rear = Q-rear-next; Q-rear-next=p-next; else Q-rear-next-next=p-next;/摘下結(jié)點p free(p);/釋放被刪結(jié)點 return x; (7

15、)假設(shè)以數(shù)組Qm存放循環(huán)隊列中的元素, 同時設(shè)置一個標志tag,以tag = 0和tag = 1來區(qū)別在隊頭指針(front)和隊尾指針(rear)相等時,隊列狀態(tài)為“空”還是“滿”。試編寫與此結(jié)構(gòu)相應的插入(enqueue)和刪除(dlqueue)算法。 【解答】 循環(huán)隊列類定義 #include template class Queue /循環(huán)隊列的類定義 public: int=10 );( Queue ; Queue ( ) delete Q ); void EnQueue ( Type & item ); Type DeQueue ( ( ); Type GetFront 置空隊列

16、/ MakeEmpty void ( ) front = rear = tag = 0; const return front = rear & tag = 0;IsEmpty /判隊列空否 int ( ) 判隊列滿否/ 1;tag = & front = rear return const ( )IsFullint private: 隊尾指針、隊頭指針和隊滿標志/ ; tag, front,rearint Type *Q; /存放隊列元素的數(shù)組 / 隊列最大可容納元素個數(shù) int m; 構(gòu)造函數(shù) template Queue: Queue ( int sz ) : rear (0), fro

17、nt (0), tag(0), m (sz) /建立一個最大具有 m個元素的空隊列。 Q = new Typem; /創(chuàng)建隊列空間 /斷言 : 動態(tài)存儲分配成功與否 assert ( Q != 0 ); 插入函數(shù) template void Queue : EnQueue ( Type &item ) assert ( ! IsFull ( ) ); /判隊列是否不滿,滿則出錯處理 /隊尾位置進 1, rear = ( rear + 1 ) % m; 隊尾指針指示實際隊尾位置 / 進隊列 Q rear = item; /標志改1 ,表示隊列不空 = 1; tag 刪除函數(shù) template T

18、ype Queue : DeQueue ( ) assert ( ! IsEmpty ( ) ); /判斷隊列是否不空,空則出錯處理 /隊頭位置進1, 隊頭指針指示實際隊頭的前一front = ( front + 1 ) % m; 位置 = 0; tag /表示棧不滿標志改0, front Q/返回原隊頭元素的值 return ; 讀取隊頭元素函數(shù) template Type Queue : GetFront ( ) assert ( ! IsEmpty ( ) ); /判斷隊列是否不空,空則出錯處理 /返回隊頭元素的值 return Q(front + 1) % m; (8)如果允許在循環(huán)隊

19、列的兩端都可以進行插 入和刪除操作。要求: 寫出循環(huán)隊列的類型定義; 寫出“從隊尾刪除”和“從隊頭插入”的算法。 題目分析 用一維數(shù)組 v0.M-1實現(xiàn)循環(huán)隊列,其中M是隊列長度。設(shè)隊頭指針 front和隊尾指針rear,約定front指向隊頭元素的前一位置,rear指向隊尾元素。定義front=rear時為隊空,(rear+1)%m=front 為隊滿。約定隊頭端入隊向下標小的方向發(fā)展,隊尾端入隊向下標大的方向發(fā)展。 (1)#define M 隊列可能達到的最大長度 typedef struct elemtp dataM; int front,rear; cycqueue; (2)elemt

20、p delqueue ( cycqueue Q) /Q是如上定義的循環(huán)隊列,本算法實現(xiàn)從隊尾刪除,若刪除成功,返回被刪除元素,否則給出出錯信息。 if (Q.front=Q.rear) printf(“隊列空”); exit(0); 修.rear=(Q.rear-1+M)%M; /Q 改隊尾指針。 return(Q.data(Q.rear+1+M)%M); /返回出隊元素。 /從隊尾刪除算法結(jié)束 void enqueue (cycqueue Q, elemtp x) / Q是順序存儲的循環(huán)隊列,本算法實現(xiàn)“從隊頭插入”元素x。 if (Q.rear=(Q.front-1+M)%M) print

21、f(“隊滿”; exit(0);) Q.dataQ.front=x; /x 入隊列 Q.front=(Q.front-1+M)%M; /修改隊頭指針。 / 結(jié)束從隊頭插入算法。 (9)已知Ackermann函數(shù)定義如下: 寫出計算Ack(m,n)的遞歸算法,并根據(jù)此算法給出出Ack(2,1)的計算過程。 寫出計算Ack(m,n)的非遞歸算法。 int Ack(int m,n) if (m=0) return(n+1); else if(m!=0&n=0) return(Ack(m-1,1); else return(Ack(m-1,Ack(m,m-1); /算法結(jié)束 (1)Ack(2,1)的計

22、算過程 Ack(2,1)=Ack(1,Ack(2,0) /因m0,n0而得 =Ack(1,Ack(1,1) /因m0,n=0而得 =Ack(1,Ack(0,Ack(1,0) / 因m0,n0而得 = Ack(1,Ack(0,Ack(0,1) / 因m0,n=0而得 =Ack(1,Ack(0,2) / 因m=0而得 =Ack(1,3) / 因m=0而得 =Ack(0,Ack(1,2) /因m0,n0而得 = Ack(0,Ack(0,Ack(1,1) 而得m0,n0因/ = Ack(0,Ack(0,Ack(0,Ack(1,0) /因 而得m0,n0 = /Ack(0,Ack(0,Ack(0,Ack

23、(0,1) 因 而得m0,n=0Ack(0,Ack(0,Ack(0,2) = /而得因m=0Ack(0,Ack(0,3) = m=0而得/因Ack(0,4) = /n=0而得因 =5 /因n=0而得 (2)int Ackerman( int m, int n) int akmMN;int i,j; for(j=0;jN;j+) akm0j;=j+1; for(i=1;im;i+) akmi0=akmi-11; for(j=1;jN;j+) akmij=akmi-1akmij-1; return(akmmn); /算法結(jié)束 10f, 鏈表中存(為單鏈表的表頭指針)已知儲的都是整型數(shù)據(jù),試寫出實現(xiàn)

24、下列運算的遞歸 算法: 求鏈表中的最大整數(shù); 求鏈表的結(jié)點個數(shù); 求所有整數(shù)的平均值。#include /定義在頭文件剜捥牽敶楌瑳栮中 ; class List class ListNode /鏈表結(jié)點類; friend class Listprivate: int data; /結(jié)點數(shù)據(jù) /結(jié)點指針 ; ListNode *link ListNode ( const int item ) : data (item), link(NULL) /構(gòu)造函數(shù) ; class List 鏈表類/ private: ; currentfirstListNode * , ); int Max ( List

25、Node *f); ListNode *f int Num ( ); int& ( float Avg ListNode *f, npublic: 構(gòu)造函數(shù) /) (), ( ) :List first ( NULLcurrentNULL/ 析構(gòu)函數(shù) List ( ) /創(chuàng)建鏈表結(jié)點, 其值為item item ( const int ListNode* NewNode ); /建立鏈表, 以輸入); retvalue NewList void ( const int retvalue結(jié)束 / ( ); void PrintList 輸出鏈表所有結(jié)點數(shù)據(jù) /求鏈表所有數(shù)據(jù)的最大值 int Ge

26、tMax ( ) return Max ( first ); int GetNum ( ) return Num ( first求鏈表中數(shù)據(jù)個數(shù)/ ); float GetAvg ( ) return /求鏈表所有數(shù)據(jù)的平均值A(chǔ)vg ( first ); ; ListNode* List : NewNode ( const int item ) /創(chuàng)建新鏈表結(jié)點 ); ListNode *newnode = new ListNode (item; newnodereturn ( const int List : NewListretvalue ) 以輸入retvalue結(jié)束, /建立鏈表voi

27、d ; ListNode *qNULLfirst = ; int value; cout value; 輸入/ 輸入有效 ) while ( value != retvalue / /value ( q = NewNodevalue ); 的新結(jié)點 建立包含 if ( first = NULL ) first = current = q新結(jié)點成為鏈表第一個結(jié)點/空表時, ; else current-link = q; , /非空表時新結(jié)點鏈入鏈尾current = q; cin /再輸入value ; current- ; link = NULL 鏈尾封閉 / / Listvoid : Pr

28、intList ( ) 輸出鏈表cout datapcout cout f link = NULLdata- = int temp 在當前結(jié)點的后繼鏈表中求最大值/ ); link - (Max f f if ( , 如果當前結(jié)點的值還要大/ 返回當前檢點值-f ) return data temp-data; / 否則返回后繼鏈表中的最大值 ; tempelse return ) ListNode *fNumListint : ( : / 遞歸算法求鏈表中結(jié)點個數(shù)0 返回 , ) return 0; f = NULLif ( 空表 / 1 - f (return 1+ Numlink返回后繼

29、鏈表結(jié)點個數(shù)加 ); , 否則/ , int& ListNode *f ( Avg :Listfloat 遞歸算法/n ) 求鏈表中所有元素的平均值: 遞歸結(jié)束條件 link = NULL-f if ( ) 鏈表中只有一個結(jié)點/, n = 1; return ( float ) (f -data ); else float Sum = Avg ( f -link, n ) * n; n+; return ( f -data + Sum ) / n; #include RecurveList.h /定義在主文件中 ) argv, char* argc ( int mainint List tes

30、t; int finished; cout finished; /輸入建表結(jié)束標志數(shù)據(jù) test.NewList ( finished ); /建立鏈表 test.PrintList ( ); /打印鏈表 cout The Max is : test.GetMax ( ); cout The Num is : test.GetNum ( ); cout The Ave is : test.GetAve () n; printf ( Hello World!n ); return 0; 第4章 串、數(shù)組和廣義表 習題 1選擇題 (1)串是一種特殊的線性表,其特殊性體現(xiàn)在( )。 A可以順序存儲

31、B數(shù)據(jù)元素是一個字符 C可以鏈式存儲 D數(shù)據(jù)元素可以是多個字符若 (2)串下面關(guān)于串的的敘述中,( )是不正確的? A串是字符的有限序列 B空串是由空格構(gòu)成的串 C模式匹配是串的一種重要運算 D串既可以采用順序存儲,也可以采用鏈式存儲 (3)串“ababaaababaa”的next數(shù)組為( )。 A012345678999 B012121111212 C011234223456 D0123012322345 (4)串“ababaabab”的nextval為( )。 010102101 B 010104101 A C010100011 D010101011 (5)串的長度是指( )。 A串中所含

32、不同字母的個數(shù) B串中所含字符的個數(shù) C串中所含不同字符的個數(shù) D串中所含非空格字符的個數(shù) (6)假設(shè)以行序為主序存儲二維數(shù)組A=array1.100,1.100,設(shè)每個數(shù)據(jù)元素占2個存儲單元,基地址為10,則LOC5,5=( )。 A808 B818 C1010 D1020 (7)設(shè)有數(shù)組Ai,j,數(shù)組的每個元素長度為3字節(jié),i的值為1到8,j的值為1到10,數(shù)組從內(nèi)存首地址BA開始順序存放,當用以列為主存放時,元素A5,8的存儲首地址為( )。 ABA+141 BBA+180 CBA+222 DBA+225 (8)設(shè)有一個10階的對稱矩陣A,采用壓縮存儲方式,以行序為主存儲,a為第一元素,

33、11其存儲地址為1,每個元素占一個地址空間,則a的地址為( )。 85 33 B 13 A C18 D40 (9)若對n階對稱矩陣A以行序為主序方式將其下三角形的元素(包括主對角線上所有元素) 依次存放于一維數(shù)組B1.(n(n+1)/2中,則在B中確定a(ij)的位置k的關(guān)系為( )。 ijAi*(i-1)/2+j Bj*(j-1)/2+i Ci*(i+1)/2+j Dj*(j+1)/2+i (10)AN,N是對稱矩陣,將下面三角(包括對角線)以行序存儲到一維數(shù)組TN(N+1)/2中,則對任一上三角元素aij對應Tk的下標k是( )。 Ai(i-1)/2+j Bj(j-1)/2+i Ci(j-

34、i)/2+1 Dj(i-1)/2+1 (11)設(shè)二維數(shù)組A1. m,1. n(即m行n列)按行存儲在數(shù)組B1. m*n中,則二維數(shù)組元素Ai,j在一維數(shù)組B中的下標為( )。 A(i-1)*n+j B(i-1)*n+j-1 Ci*(j-1) Dj*m+i-1 (12)數(shù)組A0.4,-1.-3,5.7中含有元素的個數(shù)( )。 A55 B45 16 D 36 C 則A=(a,b,(c,d),(e,(f,g),)廣義表(13 )。Head(Tail(Head(Tail(Tail(A)的值為( B(d) A(g) d D Cc ,表尾)的表頭是( (14)廣義表(a,b,c,d) 。 )是( ) B(

35、 Aa (b,c,d) D (a,b,c,d) C的長度和深L,則15)設(shè)廣義表L=(a,b,c)( )。度分別為( B1和3 A1和1 3 2和 D C1和2 寫出用abcaabbabcabt=(1)已知模式串nextvalnext和法求得的每個字符對應的KMP 函數(shù)值。 nextval值如下:的next和t模式串j 1 2 3 4 5 6 7 8 9 10 11 12 a b 串t c a a b acbab 2 1 2 nextj 0 1 1 53 4 3 1 2 1 2 1 0 nextva 1 0 50 1 0 1 lj 3 (2)設(shè)目標為t=“abcaabbabcabaacbacb

36、a”,模式為p=“abcabaa” 計算模式p的naxtval函數(shù)值; 不寫出算法,只畫出利用KMP算法進行模式匹配時每一趟的匹配過程。 p的nextval函數(shù)值為0110132(。p的next函數(shù)值為0111232)。 利用KMP(改進的nextval)算法,每趟匹配過程如下: 第一趟匹配: abcaabbabcabaacbacba abcab(i=5,j=5) 第二趟匹配: abcaabbabcabaacbacba abc(i=7,j=3) 第三趟匹配: abcaabbabcabaacbacba a(i=7,j=1) abcaabbabcabaac bacba 第四趟匹配: (成功) ab

37、cabaa(i=15,j=8) (3)數(shù)組A中,每個元素Ai,j的長度均為 32個二進位,行下標從-1到9,列下標從1到11,從首地址S開始連續(xù)存放主存儲器中,主存儲器字長為16位。求: 存放該數(shù)組所需多少單元? 存放數(shù)組第4列所有元素至少需多少單元? 數(shù)組按行存放時,元素A7,4的起始地址是多少? 數(shù)組按列存放時,元素A4,7的起始地址是多少? 每個元素32個二進制位,主存字長16位,故每個元素占2個字長,行下標可平移至1到11。 (1)242 (2)22 (3)s+182 (4)s+142 (4)請將香蕉banana用工具 H( )Head( ),T( )Tail( )從L中取出。 L=(

38、apple,(orange,(strawberry,(banana),peach),pear) H(H(T(H(T(H(T(L) (5)寫一個算法統(tǒng)計在輸入字符串中各個不同字符出現(xiàn)的頻度并將結(jié)果存入文件(字符串中的合法字符為A-Z這26個字母和0-9這10個數(shù)字)。 void Count() /統(tǒng)計輸入字符串中數(shù)字字符和字母字符的個數(shù)。 int i,num36; char ch; for(i0;i36;i+)numi;/ 初始化 while(chgetchar()!=#) /#表示輸入字符串結(jié)束。 if(0=ch=9)i=ch48;numi+; / 數(shù)字字符 else if(A=ch=Z)i=ch-65+10;numi+;/ 字母字符 for(i=0;i10;i+) / 輸出數(shù)字字符的個數(shù) printf(“數(shù)字d的個數(shù)dn”, i,numi); for(i10;i36;i+)/ 求出字母字符的個數(shù) printf(“字母字符c的個數(shù)dn”,i55,numi); / 算法結(jié)束。 (6)寫一個遞歸算法來實現(xiàn)字符串逆序存儲,要求不另設(shè)串存儲空間

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論