棧的學習(3)

2021-08-15 03:15:36 字數 2013 閱讀 5233

棧學習中必做題--中綴表示式轉換成字尾表示式(字尾表示式也叫逆波蘭表示式)

列如(a+b)--ab+

首先用順序儲存來實現:

#include#includechar stack[100]=;

int compare(char s1,char s2);

int isblock();

void pop(int t);

void push(char s,int i);

int isnum(char s);

int main()

; int i,t=0;

gets(str);

for(i=0;str[i]!='\0';i++)

push(str[i],++t);

}else if(compare(stack[t],str[i])==0)

pop(t--);}}

}if(t>=0)

return 0;

}int isnum(char s)

void push(char s,int i)

void pop(int t)

int isblock()

int compare(char s1,char s2)

用教科書般的棧來實現中綴到字尾

#define stacksize 20

typedef struct

sqstack;

void initstack(sqstack *s)

void push(sqstack *s,char e)

*(s->top)=e;

s->top++;

}void pop(sqstack *s,char *e)

s->top--;

*e=*(s->top);

}int stacklen(sqstack s)

int main()

}if(')'==c)//右括號,彈出元素,彈到左括號為止

}else if(c=='+'||c=='-')//+和-的優先順序最低,只要是這兩個,棧在非空時就要一直彈元素出來,彈到出現括號和空棧

else

else

}while(stacklen(s)&&'('!=e);

push(&s,c);//不要忘記要把輸入的元素壓棧}}

else if(c=='*'||c=='/'||c=='(')//優先順序最高,必修壓棧

else if(c=='\n')

else

scanf("%c",&c);

}while(stacklen(s))//棧不為空時

return 0;

}

逆波蘭計算器:

列如:輸入:9 3 1 - 3 * + 10 2 / +

輸出為:20 

#define stacksize 20

#includetypedef struct

sqstack;

void initstack(sqstack *s)

void push(sqstack *s,double e)

*(s->top)=e;

s->top++;

}void pop(sqstack *s,double *e)

s->top--;

*e=*(s->top);

}int stacklen(sqstack s)

int main()

scanf("%c",&c);

if(c==' ')

}switch(c)

else

break;

}scanf("%c",&c);

}pop(&s,&d);

printf("結果為:%lf\n",d);

return 0;

}

邁向全棧開發學習 3

久違的一文了,有乙個多月沒有更新我這個博文了,太懶了 今天突然想起來就把這一文寫了。上回簡單說了下es6的語法,這回我就做了乙個sass的綜合專案練習,我用sass寫了乙個頁面。只是乙個頁面布局的練習,沒怎麼運用到js。先貼個 先 1 require sass style.scss 2 import...

3 棧的應用

棧的應用很廣,函式的呼叫的底層實現,和實現表示式值得計算,可以實現括號的匹配,和瀏覽器的前進和後退的實現。import org.junit.test import com.ypl.demo.arraystack 遇到數字直接壓人棧中。左括號在進入棧中之前元素優先順序最高。左括號在進人棧後優先順序最低...

3 棧的操作

實現方法 1 構建乙個節點結構體只含有指標域 2 構建乙個鍊錶結構體,包含頭節點和鍊錶的大小 3 使用者使用時需要預留出指標域的記憶體空間。節點結構體 typedef struct linknode linknode 鍊錶結構體 typedef struct liststack liststack ...