這篇文章給大家介紹逆波蘭計算器的完整C代碼怎么寫,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
/* 逆波蘭計算器 */
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
typedef double Elemtype;
typedef struct StackNode {
Elemtype data;
struct StackNode *next;
}StackNode, *pStackNode;
typedef struct LinkStack {
pStackNode top;
int count;
}LinkStack, *pLinkStack;
//鏈棧創建和初始化
pLinkStack InitStack ( void )
{
pLinkStack s = (pLinkStack)malloc(sizeof(LinkStack));
s -> top = NULL;
s -> count = 0;
return s;
}
//鏈棧是否為空
int StackEmpty( pLinkStack s )
{
return (s -> top == NULL ? 1 : 0 );
}
//鏈棧入棧
void Push( pLinkStack s, Elemtype e )
{
pStackNode p = (pStackNode)malloc(sizeof(StackNode));
p -> data = e;
if( s -> top != NULL )
p -> next = s -> top;
s -> top = p;
s -> count++;
}
//鏈棧出棧
Elemtype Pop( pLinkStack s )
{
Elemtype temp;
pStackNode p;
if( StackEmpty(s) )
exit(0);
temp = s -> top -> data;
p = s -> top;
s->top = s->top->next;
free(p);
s->count--;
return temp;
}
int main()
{
char c;
Elemtype temp1, temp2;
char str[20];
int i=0;
pLinkStack s = InitStack();
printf("請輸入表達式 :\n");
scanf("%c", &c);
while( c != '\n' ) {
while( isdigit(c) || c=='.' ) {//過濾數字
str[i++] = c;
str[i] = '\0';
if( i>=20 )
printf("出錯: 輸入的數據過大!\n");
scanf("%c", &c);
if( c == ' ' ) {
Push( s, atof(str));
i = 0;
break;
}
}
switch( c ) {
case '+':
temp1 = Pop( s ) ;
temp2 = Pop( s ) ;
Push( s, temp2 + temp1 );
break;
case '-':
temp1 = Pop( s ) ;
temp2 = Pop( s ) ;
Push( s, temp2 - temp1);
break;
case '*':
temp1 = Pop( s ) ;
temp2 = Pop( s ) ;
Push( s, temp2 * temp1);
break;
case '/':
temp1 = Pop( s ) ;
temp2 = Pop( s ) ;
Push( s, temp2 / temp1);
break;
default:
break;
}
scanf("%c", &c);
}
printf("結果為: %f\n", Pop(s));
return 0;
}關于逆波蘭計算器的完整C代碼怎么寫就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。