需要預覽不帶括號情況:
棧的應用之算術表示式(不帶括號)
【設計要求】輸入包含±*/四種運算,(含有()括號的合法算術表示式,且運算元為多位整數,並計算其值,表示式以#開始,並以#結束)。運算符號的優先順序對比如下表所示:
#define stack_init_size 100 //儲存空間初始分配量
#define stackincrement 10 //儲存空間分配增量
typedef char selemtype;
typedef char operandtype; //表示式求值的運算型別
typedef int status;
typedef struct
sqstack;
//構造乙個空棧
status initstack(sqstack* s)
s->top = s->base;
s->stacksize = stackincrement;
return ok;
}//若棧不為空,則用e返回s的棧頂元素,並返回ok;否則返回error
status gettop(sqstack* s, selemtype* e)
//插入元素e為新的棧頂元素
status push(sqstack* s, selemtype e)
s->top = s->base + s->stacksize;
s->stacksize += stackincrement;
} *s->top++ = e;
return ok;
}//若棧不為空,則刪除s的棧頂元素,用e返回其值,並返回ok;否則返回error
status pop(sqstack* s, selemtype* e)
status stackdestroy(sqstack* s)
void clearstack(sqstack* s)//清空棧s,保留棧底指標
char precede(char c1, char c2) ,,,
,,,};
switch (c1)
switch (c2)
return pre[i][j];
}//判斷c是否為運算子
status in(operandtype c)
}//二元運算(a theta b)
operandtype operate(operandtype a, operandtype theta, operandtype b)
return c;
}//算術表示式求值的算符優先演算法,設optr和opnd分別為運算子棧和運算數棧,op為運算子集合
operandtype evaluateexpression()
else
while (c != '#' || x != '#')
}else if (c >= '0' && c <= '9') //c是運算元
while (c >= '0' && c <= '9');
z[i] = 0;
d = atoi(z); //將字元陣列轉為整型存於d
push(&opnd, d);
} else //c為非法字元
gettop(&optr, &x);
} gettop(&opnd, &x);
stackdestroy(&optr);
stackdestroy(&opnd);
return x;
}int main()
鏈棧以及順序棧應用 算數表示式
利用鏈棧將中綴表示式轉化為字尾表示式,然後利用順序棧進行掃瞄計算,返回結果 書上的 1 include 2 include 3 include 4 define size 50 5using namespace std 6 typedef struct node 7 linkstack,stackn...
棧實現表示式計算 資料結構
思路 所包含的運算子有 1 建立兩個棧,乙個用來儲存運算元,另乙個用來儲存運算子,開始時在運算子棧中先壓入 0 乙個表示式的結束符。2 然後從左至右依次讀取表示式中的各個符號 運算元或者運算子 3 如果讀到的是運算元直接存入運算元棧 4 如果讀到的是運算子,則作進一步判斷 若讀到的是 0 結束符,而...
資料結構之 棧的應用
前面幾篇寫的都是資料結構原理性內容,也在寫棧的時候提到了棧的應用場景很欠缺,所以這兩天把棧的幾個應用寫一寫,貼出來以後查閱方便。棧的幾個典型應用例子包括 1 漢諾塔問題 2 括號匹配問題 3 迷宮老鼠問題 4 電路防交叉的佈線問題 接近括號匹配 5 就是這個部落格貼出來的車廂重排問題 其實是乙個排序...