c++如何改寫成c
這是小弟資料結構的作業
分別是 1.以Array Implements Stack 將中置式數學運算式轉換成後置式 2.以鏈結串列實作堆疊將中置式數學運算式轉換成後置式 ↓題目 http://hero126.myweb.hinet.net/post.doc 老師叫我們用c改寫 可是小弟只有在大ㄧ時修過c語言 對c++的語法不是很清楚 請教大大 c++如何改寫成c? 用上面2個題目!! |
就您的程式而言 c 沒有
<繼承性> 比如 ::、:、. (這裡的 . 是指 成員函式) <封裝性、建構子...> 比如 類別 class Stack{ private: ... public: Stack(); ~Stack(); ... (請改用 struct xx {}; 結構) <delete> 也沒有 new C是 int * p; malloc(sizeof(int)); free(p); c++是 int * p; p=new int; delete p; |
... 好眼熟的程式。
|
引用:
引用:
我還是有些不懂! 感激不盡~ |
第一題
語法:
//***************************************************** 測試案例: A*B/C+D/E-F*G 結果不會是 (A+B)*C/D-(E+F)*G 而是 ab*c/de/+fg*- |
感謝mini版大,小弟已經理解了!
引用:
這個程式是把方程式從中置式的轉變成後置式 中置式 ==> 後置式 A*B/C+D/E-F*G ==> AB*C/DE/+FG*- (A+B)*C/D-(E+F)*G ==> AB+C*D/EF+G*- 所以這個程式沒問題! 又學的一點東西了!再次感謝mini大! |
#include <stdio.h>
#define S 50 int stk[S]={0},top=-1; posfix( char*in, char*out ) { int i=0,o=0; char chk; while( in[i] != '\0') { chk = in[i++]; switch (chk) { case '(': push(stk,chk); break; case ')': while ( stk[top] != '(' ) out[o++]; pop(stk); break; case '+': case '-': case '*': case '/': while ( pochk(stk[top]) >= pochk(chk) ) out[o++] = pop(stk); push(stk,chk); break; default: out[o++] = chk; break; } } while ( top > -1 ) out[o++] = pop(stk); out[o] = '\0'; } pochk( int chk ) { int i; int n[6] = {0,1,1,2,2,0}; char o[6] = "(+-*/"; for( i = 0; i < 6; i++ ) if( chk == o[i] ) return n[i]; return; } push( int*s, int d ) { if ( top >= S-1 ) return; else s[++top] = d; return; } pop( int*s ) { int d; if ( top == -1 ) return; else { d = s[top]; s[top--] = 0; return d; } } main() { char in[S]; char out[S]; clrscr(); printf("in: "); scanf("%s",in); posfix(in,out); printf("\nout: %s",out); getch(); } #include <stdio.h> struct stack { int data; struct stack*next; }test; struct stack *stk; posfix( char*in, char*out ) { int i=0,o=0; char chk; while( in[i] != '\0') { chk = in[i++]; switch (chk) { case '(': push(stk,chk); break; case ')': while ( stk->data != '(' ) out[o++]; pop(stk); break; case '+': case '-': case '*': case '/': while ( pochk(stk->data) >= pochk(chk) ) out[o++] = pop(stk); push(stk,chk); break; default: out[o++] = chk; break; } } while ( stk->next != NULL ) out[o++] = pop(stk); out[o] = '\0'; } pochk( int chk ) { int i; int n[6] = {0,1,1,2,2,0}; char o[6] = "(+-*/"; for( i = 0; i < 6; i++ ) if( chk == o[i] ) return n[i]; return; } push( struct stack*s, int d ) { struct stack *new; new = malloc(sizeof(test)); new->data = d; new->next = s; stk = new; } pop( struct stack*s ) { int d; struct stack*pre,*cur; pre = NULL; cur = s; if (cur != NULL) { pre = cur; d = cur->data; cur = cur->next; stk = cur; free(pre); return d; } } main() { char in[50]; char out[50]; clrscr(); printf("in: "); scanf("%s",in); push(stk,0); posfix(in,out); printf("\nout: %s",out); getch(); } |
所有時間均為台北時間。現在的時間是 07:09 PM。 |
Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.
『服務條款』
* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *