鏈棧實現簡單的計算器功能

2021-09-29 01:16:59 字數 4227 閱讀 8913

輸入的格式限定有待完善

#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

#define ok 1

#define error 0

typedef int status;

typedef struct snodesnode;

typedef struct linkstacklinkstack;

status creat(linkstack* s)

s->top->next=null;

s->bottom->next=null;

s->length=0;

return ok;

}bool empty(linkstack s)

int size(linkstack s)

status push(linkstack* s,int e)

newx->data=e;

newx->next=s->top->next;

s->top->next=newx;

if(!s->length)

s->bottom=s->bottom->next;

s->length++;

return ok;

}status pop(linkstack* s)

snode* del=s->top->next;

s->top->next=del->next;

free(del);

s->length--;

if(!s->length)

s->bottom=s->top;

return ok;

}int gettop(linkstack s)

return s.top->next->data;

}status show(linkstack s)

snode* p=s.top->next;

while(p)

printf("\n");

return ok;

}status clear(linkstack *s)

status destroy(linkstack* s)

s->top=s->bottom=null;

return ok;

}int type(int c)

/* 運算子優先順序表

0 1 2 3 4 5 6

+ - * / ( ) #

0+ > > < < < > >

1- > > < < < > >

2* > > > > < > >

3/ > > > > < > >

4( < < < < < = 。

5) > > > > 。 > >

6# < < < < < 。 =

*/ int precede(char a,char b);

char pp[7]=;//用於查詢運算子的序號

int hang=0,lie=0;

while(a!=pp[hang])

hang++;

while(b!=pp[lie])

lie++;

return rule[hang][lie];

} int operate(int a,char theta,int b)

}status solve()

if(type(ch))

else

switch(precede(gettop(sign),ch))

push(&num,operate(b,theta,a));

break;

case 2://碰到優先順序高的運算子 高階運算子入棧

push(&sign,ch);

ch=getchar();

break;

}} int res=gettop(num);

pop(&num);

pop(&sign);

if(!empty(num)||!empty(sign))

cout《這裡還有乙個可以實現多位數字的運算的加強版

#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

#define ok 1

#define error 0

typedef int status;

typedef struct snodesnode;

typedef struct linkstacklinkstack;

status creat(linkstack* s)

s->top->next=null;

s->bottom->next=null;

s->length=0;

return ok; }

bool empty(linkstack s)

int size(linkstack s)

status push(linkstack* s,int e)

newx->data=e;

newx->next=s->top->next;

s->top->next=newx;

if(!s->length)

s->bottom=s->bottom->next;

s->length++;

return ok;}

status pop(linkstack* s)

snode* del=s->top->next;

s->top->next=del->next;

free(del);

s->length--;

if(!s->length)

s->bottom=s->top;

return ok;}

int gettop(linkstack s)

return s.top->next->data;}

status show(linkstack s)

snode* p=s.top->next;

while(p)

printf("\n");

return ok;}

status clear(linkstack *s)

status destroy(linkstack* s)

s->top=s->bottom=null;

return ok;}

int type(int c)

/* 運算子優先順序表

0 1 2 3 4 5 6

+ - * / ( ) #

0+ > > < < < > >

1- > > < < < > >

2* > > > > < > >

3/ > > > > < > >

4( < < < < < = 。

5) > > > > 。 > >

6# < < < < < 。 =

*/ int precede(char a,char b);

char pp[7]=;//用於查詢運算子的序號

int hang=0,lie=0;

while(a!=pp[hang])

hang++;

while(b!=pp[lie])

lie++;

return rule[hang][lie];}

int operate(int a,char theta,int b)}

status solve()

if(str[strlen(str)-1]!='#'||str[0]=='#')

for(int i=0;ipush(&num,sum);

} switch(precede(gettop(sign),str[i]))

push(&num,operate(b,theta,a));

i--;

break;

case 2://碰到優先順序高的運算子 高階運算子入棧

push(&sign,str[i]);

break;

} }int res=gettop(num);

pop(&num);

pop(&sign);

// if(!empty(num)||!empty(sign))

cout<<"運算的結果為:"

int main()

return 0;

}

棧實現簡單的計算器

上個星期的作業,現在才改好。基本思路 當我們從鍵盤上輸入一串字元,比如1 2 3 建立兩個棧,乙個存放運算子的棧toperator,乙個存放運算元number,依次遍歷。遇到運算元就依次存放到操作棧裡 遇到運算子時,優先順序高的就直接壓進運算子棧裡,優先順序低的就依次彈出操作棧中的兩個值與運算子進行...

C 實現簡單計算器功能

實現效果 form1.cs using system using system.collections.generic using system.componentmodel using system.data using system.drawing using system.linq using...

C 實現簡單計算器功能

c 實現簡單計算器的具體 供大家參考,具體內容如下 要求 輸入乙個包含 的非負整數計算表示式,計算表示式的值,每個字元之間需有乙個空格,若一行輸入為0,則退出程式。輸入樣例 4 2 5 7 11 輸出樣例 13.36 實現 include include using namespace std ch...