數(shù)據(jù)結(jié)構(gòu)作業(yè)系統(tǒng)-答案_第1頁
數(shù)據(jù)結(jié)構(gòu)作業(yè)系統(tǒng)-答案_第2頁
數(shù)據(jù)結(jié)構(gòu)作業(yè)系統(tǒng)-答案_第3頁
數(shù)據(jù)結(jié)構(gòu)作業(yè)系統(tǒng)-答案_第4頁
數(shù)據(jù)結(jié)構(gòu)作業(yè)系統(tǒng)-答案_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2.11 設(shè)順序表L中的數(shù)據(jù)元素遞增有序。試寫一算法,將x插入到L的適當(dāng)位置上,并保持該表的有序性。要求實(shí)現(xiàn)下列函數(shù):void InsertOrderList(SqList &L, ElemType x)/* 在有序的順序表 L 中保序插入數(shù)據(jù)元素 x */順序表類型定義如下:typedef struct ElemType *elem; int length; int listsize; SqList;void InsertOrderList(SqList &L, ElemType x)/ 在有序的順序表 L 中保序插入數(shù)據(jù)元素 x int i=0,j; while(L.ele

2、mi<x&&i<L.length) i+; for(j=L.length;j>i;j-) L.elemj=L.elemj-1; L.elemi=x; L.length+=1;2.12 設(shè)A=(a1,am)和B=(b1,bn)均為有序順序表,A'和B'分別為A和B中除去最大共同前綴后的子表(例如,A=(x,y,y,z,x,z),B=(x,y,y,z,y,x,x,z),則兩者中最大的共同前綴為(x,y,y,z), 在兩表中除去最大共同前綴后的子表分別為A'=(x,z)和B'=(y,x,x,z))。若A'=B'=空表,

3、則A=B;若A'=空表,而B' 空表,或者兩者均不為空表,且A'的首元小于B'的首元,則A<B;否則A>B。試寫一個(gè)比較A和B大小的算法。(注意:在算法中,不要破壞原表A和B,也不一定先求得A'和B'才進(jìn)行比較)。要求實(shí)現(xiàn)下列函數(shù):char Compare(SqList A, SqList B);/* 比較順序表A和B, */* 返回'<', 若A<B; */* '=', 若A=B; */* '>', 若A>B */順序表類型定義如下:typedef struct

4、 ElemType *elem; int length; int listsize; SqList;char Compare(SqList A, SqList B)/ 比較順序表A和B, / 返回'<', 若A<B;/ '=', 若A=B;/ '>', 若A>B int i=0; while(A.elemi=B.elemi&&i<A.length&&i<B.length) i+; if(i=A.length&&i=B.length) return '=&#

5、39; else if(A.elemi<B.elemi|i=A.length) return '<' else if(A.elemi>B.elemi|i=B.length) return '>' 2.13 試寫一算法在帶頭結(jié)點(diǎn)的單鏈表結(jié)構(gòu)上實(shí)現(xiàn)線性表操作Locate(L,x)。實(shí)現(xiàn)下列函數(shù):LinkList Locate(LinkList L, ElemType x);/ If 'x' in the linked list whose head node is pointed / by 'L', then

6、return pointer pointing node 'x', / otherwise return 'NULL'單鏈表類型定義如下:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;LinkList Locate(LinkList &L, ElemType x)/ If 'x' in the linked list whose head node is pointed/ by 'L', then return pointe

7、r ha pointing node 'x',/ otherwise return 'NULL' LinkList p; int i=0; p=L->next; while(p->data!=x&&p!=NULL) i+; p=p->next; return p; 2.14 試寫一算法在帶頭結(jié)點(diǎn)的單鏈表結(jié)構(gòu)上實(shí)現(xiàn)線性表操作Length(L)。實(shí)現(xiàn)下列函數(shù):int Length(LinkList L);/ Return the length of the linked list / whose head node is point

8、ed by 'L'單鏈表類型定義如下:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;int Length(LinkList L)/ Return the length of the linked list / whose head node is pointed by 'L' LinkList p; int i=0; p=L->next; while(p!=NULL) i+; p=p->next; return i;2.17 試寫一算法,在無頭結(jié)點(diǎn)的動(dòng)

9、態(tài)單鏈表上實(shí)現(xiàn)線性表操作INSERT(L,i,b),并和在帶頭結(jié)點(diǎn)的動(dòng)態(tài)單鏈表上實(shí)現(xiàn)相同操作的算法進(jìn)行比較。實(shí)現(xiàn)下列函數(shù):void Insert(LinkList &L, int i, ElemType b);單鏈表類型定義如下:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;void Insert(LinkList &L, int i, ElemType b) LinkList p,q; int j=2; p=L; while(j<i) j+; p=p->next;

10、if(i!=0&&i!=1) q=(LinkList)malloc(sizeof(LNode); q->data=b; q->next=p->next; p->next=q; if(i=1) q=(LinkList)malloc(sizeof(LNode); q->data=b; q->next=p; L=q; 2.18 同2.17題要求。試寫一算法,實(shí)現(xiàn)線性表操作DELETE(L,i)。實(shí)現(xiàn)下列函數(shù):void Delete(LinkList &L, int i);單鏈表類型定義如下:typedef struct LNode Elem

11、Type data; struct LNode *next; LNode, *LinkList;void Delete(LinkList &L, int i) LinkList p,q; int j=2; p=L; while(j<i&&p!=NULL) j+; p=p->next; if(i!=0&&i!=1) q=p->next; p->next=q->next; free(q); if(i=1) q=L; L=L->next; free(q); 2.20 同2.19題條件,試寫一高效的算法,刪除表中所有值相同的多

12、余元素 (使得操作后的線性表中所有元素的值均不相同) 同時(shí)釋放被刪結(jié)點(diǎn)空間,并分析你的算法的時(shí)間復(fù)雜度。實(shí)現(xiàn)下列函數(shù):void Purge(LinkList &L);單鏈表類型定義如下:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;void Purge(LinkList &L) LinkList p,q; int i=0; p=L; while(p!=NULL&&p->next!=NULL) if(p->data=p->next->data

13、) q=p->next; p->next=q->next; free(q); else p=p->next; 2.21 試寫一算法,實(shí)現(xiàn)順序表的就地逆置,即利用原表的存儲(chǔ)空間將線性表(a1,a2,an)逆置為(an,an-1,a1)。實(shí)現(xiàn)下列函數(shù):void Inverse(SqList &L);順序表類型定義如下:typedef struct ElemType *elem; int length; int listsize; SqList;void Inverse(SqList &L) int i=0,j=0; i=L.length/2; for(j=0

14、;j<i;j+) ElemType e=L.elemj; L.elemj=L.elemL.length-j-1; L.elemL.length-j-1=e; 2.22 試寫一算法,對單鏈表實(shí)現(xiàn)就地逆置。實(shí)現(xiàn)下列函數(shù):void Inverse(LinkList &L); /* 對帶頭結(jié)點(diǎn)的單鏈表L實(shí)現(xiàn)就地逆置 */單鏈表類型定義如下:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;void Inverse(LinkList &L) /* 對帶頭結(jié)點(diǎn)的單鏈表L實(shí)現(xiàn)就地逆置 */

15、LinkList p,q,k; q=p=L->next; while(p->next!=NULL) k=q; q=p->next; p->next=q->next; q->next=k; L->next=q;2.23 設(shè)線性表A=(a1,.,am), B=(b1,.,bn),試寫一個(gè)按下列規(guī)則合并A、B為線性表C的算法,即使得 C=(a1,b1,.,am,bm,bm+1,.,bn) 當(dāng)mn時(shí);或者 C=(a1,b1,.,an,bn,an+1,.,am) 當(dāng)mn時(shí)。線性表A、B和C均以單鏈表作存儲(chǔ)結(jié)構(gòu),且C表利用A表和B表中的結(jié)點(diǎn)空間構(gòu)成。注意:單鏈表的

16、長度值m和n均未顯式存儲(chǔ)。實(shí)現(xiàn)下列函數(shù):void Merge(LinkList ha, LinkList hb, LinkList &hc)/* 依題意,合并帶頭結(jié)點(diǎn)的單鏈表ha和hb為hc */單鏈表類型定義如下:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;void Merge(LinkList ha, LinkList hb, LinkList &hc)/* 依題意,合并帶頭結(jié)點(diǎn)的單鏈表ha和hb為hc */ LinkList p,q,k,r; p=ha->next;

17、 q=hb->next; if(p=NULL)hc=hb; else if(q=NULL) hc=ha; else while(p->next!=NULL&&q->next!=NULL) k=p->next; r=q->next; p->next=q; p=k; q->next=p; q=r; if(p->next!=NULL) q->next=p->next; p->next=q; hc=ha; 2.24 假設(shè)有兩個(gè)按元素值遞增有序排列的線性表A和B,均以單鏈表作存儲(chǔ)結(jié)構(gòu),請編寫算法將A表和B表歸并成一個(gè)按元素

18、值遞減有序(即非遞增有序,允許表中含有值相同的元素)排列的線性表C, 并要求利用原表(即A表和B表)的結(jié)點(diǎn)空間構(gòu)造C表。實(shí)現(xiàn)下列函數(shù):void Union(LinkList &lc, LinkList la, LinkList lb);/* 依題意,利用la和lb原表的結(jié)點(diǎn)空間構(gòu)造lc表 */單鏈表類型定義如下:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;void Union(LinkList &lc, LinkList la, LinkList lb) LinkList pa

19、=la->next; LinkList pb=lb->next; LinkList pre=NULL; LinkList q,pc; while(pa|pb) if(pa->data<pb->data&&pa!=NULL)|pb=NULL) pc=pa; q=pa->next; pa->next=pre; pa=q; else pc=pb; q=pb->next; pb->next=pre; pb=q; pre=pc; printf("%s","done"); lc=la; la-&g

20、t;next=pc; /構(gòu)造新表頭 /* LinkList pa = la->next; LinkList pb = lb->next; LinkList pc = la; lc = la; while( pa && pb ) if( pa->data <= pb->data ) pc->next = pa; pc = pa; pa = pa->next; else pc->next = pb; pc = pb; pb = pb->next; pc->next = pa? pa: pb; free( lb ); /將c

21、實(shí)現(xiàn)就地逆置 ' LinkList p,q; p = lc->next; while( p->next ) q = p->next; p->next = p->next->next; q->next = lc->next; lc->next = q; */2.31 假設(shè)某個(gè)單向循環(huán)鏈表的長度大于1,且表中既無頭結(jié)點(diǎn)也無頭指針。已知s為指向鏈表中某個(gè)結(jié)點(diǎn)的指針,試編寫算法在鏈表中刪除指針s所指結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)。實(shí)現(xiàn)下列函數(shù):ElemType DeleteNode(LinkList s); /* 刪除指針s所指結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn),并返回被刪結(jié)

22、點(diǎn)的元素值 */單鏈表類型定義如下:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;ElemType DeleteNode(LinkList s) /* 刪除指針s所指結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn),并返回被刪結(jié)點(diǎn)的元素值 */ LinkList p; p=s->next; while(p->next->next!=s) p=p->next; ElemType e=p->next->data; p->next=s; return e;2.32 已知有一個(gè)單向循環(huán)鏈表,其每

23、個(gè)結(jié)點(diǎn)中含三個(gè)域:prev、data和next,其中data為數(shù)據(jù)域,next為指向后繼結(jié)點(diǎn)的指針域,prev也為指針域,但它的值為空(NULL),試編寫算法將此單向循環(huán)鏈表改為雙向循環(huán)鏈表,即使prev成為指向前驅(qū)結(jié)點(diǎn)的指針域。實(shí)現(xiàn)下列函數(shù):void PerfectBiLink(BiLinkList &CL);雙向循環(huán)鏈表類型定義如下:typedef struct BiNode ElemType data; int freq; / 2.38題用 struct BiNode *prev, *next; BiNode, *BiLinkList;void PerfectBiLink(BiL

24、inkList &CL) BiLinkList p,q,k; k=p=q=CL; while(p->next!=q) p=p->next; p->prev=k; k=p; q->prev=p;2.33 已知由一個(gè)線性鏈表表示的線性表中含有三類字符的數(shù)據(jù)元素(如:字母字符、數(shù)字字符和其它字符),試編寫算法將該線性鏈表分割為三個(gè)循環(huán)鏈表,其中每個(gè)循環(huán)鏈表表示的線性表中均只含一類字符。實(shí)現(xiàn)下列函數(shù):void Split(LinkList &lc, LinkList &ld, LinkList &lo, LinkList ll);單鏈表類型定義如

25、下:typedef struct LNode ElemType data; struct LNode *next; LNode, *LinkList;void Split(LinkList &A, LinkList &B, LinkList &C, LinkList L) LinkList s,p,q,r; s=L->next; A=(LinkList)malloc(sizeof(LNode);p=A; B=(LinkList)malloc(sizeof(LNode);q=B; C=(LinkList)malloc(sizeof(LNode);r=C; /建立頭結(jié)

26、點(diǎn) while(s) if(s->data>='a'&&s->data<='z')|(s->data<='Z'&&s->data>='A') p->next=s;p=s; else if(s->data>='0'&&s->data<='9') q->next=s;q=s; else r->next=s;r=s; s=s->next; /while p->

27、;next=A;q->next=B;r->next=C; /完成循環(huán)鏈表2.37 設(shè)以帶頭結(jié)點(diǎn)的雙向循環(huán)鏈表表示的線性表L=(a1,a2,.,an)。試寫一時(shí)間復(fù)雜度為O(n)的算法,將L改造為L=(a1,a3,.,an,.,a4,a2)。實(shí)現(xiàn)下列函數(shù):void ReverseEven(BiLinkList &L);雙向循環(huán)鏈表類型定義如下:typedef struct BiNode ElemType data; int freq; / 2.38題用 struct BiNode *prev, *next; BiNode, *BiLinkList;void ReverseEv

28、en(BiLinkList &L) BiLinkList p=NULL; p=L->next; while(p->next!=L&&p->next->next!=L) p->next=p->next->next; p=p->next; /此時(shí)p指向最后一個(gè)奇數(shù)結(jié)點(diǎn) if(p->next=L) p->next=L->prev->prev; else p->next=L->prev; p=p->next; /此時(shí)p指向最后一個(gè)偶數(shù)結(jié)點(diǎn) while(p->prev->prev

29、!=L) p->next=p->prev->prev; p=p->next; if(p!=L) p->next=L; /按題目要求調(diào)整了next鏈的結(jié)構(gòu),此時(shí)pre鏈仍為原狀 for(p=L;p->next!=L;p=p->next) p->next->prev=p; L->prev=p; /調(diào)整pre鏈的結(jié)構(gòu),同2.32方法2.39 試對稀疏多項(xiàng)式Pn(x)采用存儲(chǔ)量同多項(xiàng)式項(xiàng)數(shù)m成正比的順序存儲(chǔ)結(jié)構(gòu),編寫求Pn(x0)的算法(x0為給定值),并分析你的算法的時(shí)間復(fù)雜度。實(shí)現(xiàn)下列函數(shù):float Evaluate(SqPoly pn

30、, float x);/* pn.datai.coef 存放ai, */* pn.datai.exp存放ei (i=1,2,.,m) */* 本算法計(jì)算并返回多項(xiàng)式的值。不判別溢出。 */* 入口時(shí)要求0e1<e2<.<em,算法內(nèi)不對此再作驗(yàn)證*/多項(xiàng)式的順序存儲(chǔ)結(jié)構(gòu):typedef struct int coef; int exp; PolyTerm;typedef struct PolyTerm *data; int length; SqPoly;float f(float x,int j) int i; float s = 1; for( i = 0 ; i <

31、 j; +i ) s *= x; return s;float Evaluate(SqPoly pn, float x)/* pn.datai.coef 存放ai, */* pn.datai.exp存放ei (i=1,2,.,m) */* 本算法計(jì)算并返回多項(xiàng)式的值。不判別溢出。 */* 入口時(shí)要求0e1<e2<.<em,算法內(nèi)不對此再作驗(yàn)證*/ int i; float s = 0; for( i = 0; i < pn.length; +i ) s += pn.datai.coef * f( x, pn.datai.exp ); return s; 2.41 試以循

32、環(huán)鏈表作稀疏多項(xiàng)式的存儲(chǔ)結(jié)構(gòu),編寫求其導(dǎo)函數(shù)的算法,要求利用原多項(xiàng)式中的結(jié)點(diǎn)空間存放其導(dǎo)函數(shù)(多項(xiàng)式),同時(shí)釋放所有無用(被刪)結(jié)點(diǎn)。實(shí)現(xiàn)下列函數(shù):void Difference(LinkedPoly &pa);/* 稀疏多項(xiàng)式 pa 以循環(huán)鏈表作存儲(chǔ)結(jié)構(gòu), */* 將此鏈表修改成它的導(dǎo)函數(shù),并釋放無用結(jié)點(diǎn) */鏈?zhǔn)蕉囗?xiàng)式的類型定義:typedef struct PolyNode int coef; int exp; struct PolyNode *next; PolyNode, *PolyLink; / 多項(xiàng)式元素(項(xiàng))結(jié)點(diǎn)類型typedef PolyLink LinkedPoly

33、; / 鏈?zhǔn)蕉囗?xiàng)式void Difference(LinkedPoly &pa)/* 稀疏多項(xiàng)式 pa 以循環(huán)鏈表作存儲(chǔ)結(jié)構(gòu), */* 將此鏈表修改成它的導(dǎo)函數(shù),并釋放無用結(jié)點(diǎn) */ LinkedPoly p,t; t = pa->next; if( t->exp = 0 ) free(t); pa->next = pa->next->next; p = pa->next; while( p != pa ) p->coef *= p->exp; p->exp-; /if( p->next->exp = 0 ) p->

34、;next = p->next->next; p = p->next; 3.17 試寫一個(gè)算法,識(shí)別依次讀入的一個(gè)以為結(jié)束符的字符序列是否為形如'序列1&序列2'模式的字符序列。其中序列1和序列2中都不含字符'&',且序列2是序列1的逆序列。例如,'a+b&b+a'是屬該模式的字符序列,而'1+3&3-1'則不是。實(shí)現(xiàn)下列函數(shù): Status match(char *str);/* 若str是屬該模式的字符序列,*/* 則返回TRUE,否則返回FALSE */Stack是一個(gè)已實(shí)現(xiàn)

35、的棧。可使用的相關(guān)類型和函數(shù):typedef char SElemType; / 棧Stack的元素類型Status InitStack(Stack &s);Status Push(Stack &s, SElemType e);Status Pop(Stack &s, SElemType &e);Status StackEmpty(Stack s);Status GetTop(Stack s, SElemType &e);Status match(char *str)/* 若str是屬該模式的字符序列,*/* 則返回TRUE,否則返回FALSE */ S

36、tack s; SElemType e; InitStack(s); while(*str!='&') Push(s,*str); str+; str+; while(*str!='') if(StackEmpty(s) return FALSE; Pop(s,e); if(*str!=e) return FALSE; str+; if(!StackEmpty(s) return FALSE; else return TRUE;3.18 試寫一個(gè)判別表達(dá)式中開、閉括號(hào)是否配對出現(xiàn)的算法。實(shí)現(xiàn)下列函數(shù):Status MatchCheck(SqList ex

37、p);/* 順序表exp表示表達(dá)式; */* 若exp中的括號(hào)配對,則返回TRUE,否則返回FALSE */* 注:本函數(shù)不使用棧 */順序表類型定義如下:typedef struct ElemType *elem; int length; int listsize; SqList; / 順序表Status MatchCheck(SqList exp)/* 順序表exp表示表達(dá)式; */* 若exp中的括號(hào)配對,則返回TRUE,否則返回FALSE */* 注:本函數(shù)不使用棧 */ int i,j=0; for(i=0;i<exp.length;i+) if(exp.elemi='

38、(') j+; else if(exp.elemi=')'&&j=0) return FALSE; else j-; if(j=0) return TRUE; else return FALSE;3.19 假設(shè)一個(gè)算術(shù)表達(dá)式中可以包含三種括號(hào):圓括號(hào)"(" 和")",方括號(hào)""和""和花括號(hào)""和"",且這三種括號(hào)可按任意的次序嵌套使用(如:())。編寫判別給定表達(dá)式中所含括號(hào)是否正確配對出現(xiàn)的算法(已知表達(dá)式已存入數(shù)據(jù)元素為字符的順序

39、表中)。 實(shí)現(xiàn)下列函數(shù):Status MatchCheck(SqList exp); /* 順序表exp表示表達(dá)式; */* 若exp中的括號(hào)配對,則返回TRUE,否則返回FALSE */順序表類型定義如下:typedef struct ElemType *elem; int length; int listsize; SqList; / 順序表Stack是一個(gè)已實(shí)現(xiàn)的棧。可使用的相關(guān)類型和函數(shù):typedef char SElemType; / 棧Stack的元素類型Status InitStack(Stack &s);Status Push(Stack &s, SElemT

40、ype e);Status Pop(Stack &s, SElemType &e);Status StackEmpty(Stack s);Status GetTop(Stack s, SElemType &e);Status MatchCheck(SqList exp)/* 順序表exp表示表達(dá)式; */* 若exp中的括號(hào)配對,則返回TRUE,否則返回FALSE */ Stack s; int i; SElemType e; InitStack(s); for(i=0;i<exp.length;i+) if(exp.elemi=''|exp.el

41、emi=''|exp.elemi='(') Push(s,exp.elemi); else if(exp.elemi=''|exp.elemi=''|exp.elemi=')') if(StackEmpty(s) return FALSE; else Pop(s,e); if(e=''&&exp.elemi!='') return FALSE; if(e=''&&exp.elemi!='') return FALSE;

42、if(e='('&&exp.elemi!=')') return FALSE; if(StackEmpty(s) return TRUE; else return FALSE;3.20 假設(shè)以二維數(shù)組g(1.m,1.n)表示一個(gè)圖像區(qū)域,gi,j表示該區(qū)域中點(diǎn)(i,j)所具顏色,其值為從0到k的整數(shù)。編寫算法置換點(diǎn)(i0,j0)所在區(qū)域的顏色。約定和(i0,j0)同色的上、下、左、右的鄰接點(diǎn)為同色區(qū)域的點(diǎn)。實(shí)現(xiàn)下列函數(shù):void ChangeColor(GTYPE g, int m, int n, char c, int i0, int j0);

43、/* 在g1.m1.n中,將元素gi0j0 */* 所在的同色區(qū)域的顏色置換為顏色c */表示圖像區(qū)域的類型定義如下:typedef char GTYPEm+1n+1;Stack是一個(gè)已實(shí)現(xiàn)的棧??墒褂玫南嚓P(guān)類型和函數(shù):typedef int SElemType; / 棧Stack的元素類型Status StackInit(Stack &s, int initsize);Status Push(Stack &s, SElemType e);Status Pop(Stack &s, SElemType &e);Status StackEmpty(Stack s);

44、Status GetTop(Stack s, SElemType &e);void ChangeColor(GTYPE g, int m, int n, char c, int i0, int j0)/* 在g1.m1.n中,將元素gi0j0 */* 所在的同色區(qū)域的顏色置換為顏色c */ char color=gi0j0; gi0j0=c; if(i0-1>=1&&gi0-1j0=color) ChangeColor(g,m,n,c,i0-1,j0); if(j0-1>=1&&gi0j0-1=color) ChangeColor(g,m,n

45、,c,i0,j0-1); if(i0+1<=m&&gi0+1j0=color) ChangeColor(g,m,n,c,i0+1,j0); if(j0+1<=n&&gi0j0+1=color) ChangeColor(g,m,n,c,i0,j0+1);3.21 假設(shè)表達(dá)式由單字母變量和雙目四則運(yùn)算算符構(gòu)成。試寫一個(gè)算法,將一個(gè)通常書寫形式且書寫正確的表達(dá)式轉(zhuǎn)換為逆波蘭式。實(shí)現(xiàn)下列函數(shù):char *RPExpression(char *e);/* 返回表達(dá)式e的逆波蘭式 */Stack是一個(gè)已實(shí)現(xiàn)的棧。可使用的相關(guān)類型和函數(shù):typedef char

46、SElemType; / 棧Stack的元素類型Status InitStack(Stack &s);Status Push(Stack &s, SElemType e);Status Pop(Stack &s, SElemType &e);Status StackEmpty(Stack s);SElemType Top(Stack s);char *RPExpression(char *e)/* 返回表達(dá)式e的逆波蘭式 */ char *a; char i=0,j=0,m; Stack s; InitStack(s); a=(char*)malloc(size

47、of(char)*20); while(ei!=0) if(ei>='a'&&ei<='z') aj=ei; j+; else if(ei='(')Push(s,ei); else if(ei='*'|ei='/') if(GetTop(s,m)=ERROR)Push(s,ei); else if(m='*'|m='/') Pop(s,m); aj+=m; Push(s,ei); else Push(s,ei); else if(ei='+'

48、;|ei='-') if(GetTop(s,m)=ERROR)Push(s,ei); else if(m='+'|m='-') Pop(s,m); aj+=m; Push(s,ei); else if(m='*'|m='/') Pop(s,m); aj+=m; if(GetTop(s,m)=ERROR)Push(s,ei); else if(m='+'|m='-') Pop(s,m); aj+=m; Push(s,ei); else if(m='(')Push(s,ei); else if(ei=')') Pop(s,m); while(m!='('

溫馨提示

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

評論

0/150

提交評論