国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

4.2 實現(xiàn)基于棧的表達式求值計算器(難度4/10)

這篇具有很好參考價值的文章主要介紹了4.2 實現(xiàn)基于棧的表達式求值計算器(難度4/10)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

本作業(yè)主要考察:解釋器模式的實現(xiàn)思想/棧結(jié)構(gòu)在表達式求值方面的絕對優(yōu)勢

C++數(shù)據(jù)結(jié)構(gòu)與算法夯實基礎(chǔ)作業(yè)列表

通過棧的應(yīng)用,理解特定領(lǐng)域設(shè)計的關(guān)鍵作用,給大家眼前一亮的感覺。深刻理解計算機語言和人類語言完美結(jié)合的杰作。是作業(yè)中的上等作品,是數(shù)據(jù)結(jié)構(gòu)與算法的典型代表。

這個作業(yè)是我最心愛的一個。因為我有個盜版Win10居然打不開計算器;還有就是一些高級比如指數(shù)運算怕不會操作Windows的自帶計算器算錯,要用自己的計算器再驗證一遍;第三個就是Windows的計算器不支持回車鍵和命令行,我的就可以,回車一下就行,Windows的總是要鼠標點來點去,煩不勝煩。

需求如下:

實現(xiàn)表達式求值的計算器,以支持加、減、乘、除、指數(shù)冪、括號,6種操作。

實現(xiàn)代碼完成下面的測試用例,要求和預(yù)期輸出結(jié)果一致

4.2 實現(xiàn)基于棧的表達式求值計算器(難度4/10),C++數(shù)據(jù)結(jié)構(gòu)與算法實現(xiàn),stm32,嵌入式硬件,單片機,算法,c++,鏈表,數(shù)據(jù)結(jié)構(gòu)

接口提示(可以自行定義接口,只要實現(xiàn)合理,能實現(xiàn)需求就行):

Stackitem.h

#pragma once

#include <iostream> //ostream
using namespace std;

template<typename T> class CStack;

template<typename T>
class CStackitem
{
public:
	friend class CStack<T>;

	CStackitem(void);
	CStackitem(T _data);
	CStackitem(const CStackitem& _item);
	~CStackitem(void);

	const T GetData(void) const;

private:
	CStackitem& operator=(const CStackitem& _item);//disallow a = b;

private:
	CStackitem* pPre;
	CStackitem* pNext;
	T data;
};

Stack.h

#pragma once

#include "Stackitem.h"

template<typename T>
class CStack
{
public:
	CStack(void);
	CStack(const CStack& _stack);
	~CStack(void);

public:
	const T& top(void) const;
	bool empty(void) const;
	size_t size(void) const;
	void push(const CStackitem<T>& _item);
	const T pop(void);

private:
	CStack& operator=(const CStack& _stack);//a = b; is not allowed

private:

	CStackitem<T>* m_pTail;
	size_t m_size;
};

Calculator.h

#pragma once

#include <iostream>
#include <list>
#include <string>
#include <sstream>
using namespace std;

#include "ExpressionException.h"

typedef list<string> Expression;

ostream& operator<<(ostream& _os, const Expression& _item);

class Calculator
{
public:
	Calculator(const char* _infix);
	Calculator(const string& _infix);
	~Calculator(void);
	
public:
	string GetExpression(void) const;
	void SetExpression(const string& _expression);
	
	template<typename T>
	T GetValue(void ) const;

	Expression ToPostfix(void) const;

public:
	static Expression ToPostfix(const string& pre);
	static bool Check(const string& _expression, string& _invalidInfor);

private:
	static void ToPostfix(const string& pre, Expression& post);
	static bool IsOperator(char op);                         // 判斷是否為運算符 
	static int Priority(char op);                            // 求運算符優(yōu)先級 
	static void ReadSpace(string::const_iterator& _itr, string::const_iterator& _end);
	static void ReadNumber(string::const_iterator& itr, string::const_iterator& _end, string& _value);
	
private:
	string m_infix;
};

main.cpp

#include <iostream>
#include <string>
#include <cassert>
#include <list>
using namespace std;

#include "Stack.h"
#include "Calculator.h"

void InputAndCalculator(list<Calculator>& listCalculator);
void Output(const list<Calculator>& listCalculator);
void TestAll(list<Calculator>& listCalculator);

int main(int argc, char** argv)
{
	cout<<"support: + - * / ^ ( )"<<endl;
	cout<<"Input 0 for end your input."<<endl;

	list<Calculator> listCalculator;

	InputAndCalculator(listCalculator);//Extra credit 1:(1)any space (2)catch invalid input
	
	return 0;
}
void InputAndCalculator(list<Calculator>& listCalculator)
{
	while (true)
	{
		string sLine, invalidInfor;
		getline(cin, sLine);
		if (Calculator::Check(sLine, invalidInfor) == false)//Extra credit 1:(1)any space (2)catch invalid input
		{
			cout<<invalidInfor<<endl;
			continue;
		}
		listCalculator.push_back(sLine);
		Output(listCalculator);
		listCalculator.clear();
	}
}

參考答案:

C++表達式求值(Stack and Expression)?

blog.csdn.net/calmreason/article/details/78163268?編輯文章來源地址http://www.zghlxwxcb.cn/news/detail-693084.html

到了這里,關(guān)于4.2 實現(xiàn)基于棧的表達式求值計算器(難度4/10)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu) | 棧的中綴表達式求值

    數(shù)據(jù)結(jié)構(gòu) | 棧的中綴表達式求值

    目錄 什么是棧? 棧的基本操作 入棧操作 出棧操作 取棧頂元素 中綴表達式求值 實現(xiàn)思路 具體代碼 棧是一種線性數(shù)據(jù)結(jié)構(gòu),具有“先進后出”(Last In First Out, LIFO)的特點。它可以看作是一種受限的線性表,只能在表的一端進行插入和刪除操作,這一端被稱為棧頂,另一端

    2024年02月02日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)與算法-(7)---棧的應(yīng)用-(4)后綴表達式求值

    數(shù)據(jù)結(jié)構(gòu)與算法-(7)---棧的應(yīng)用-(4)后綴表達式求值

    ??write in front?? ??大家好,我是Aileen??.希望你看完之后,能對你有所幫助,不足請指正!共同學(xué)習(xí)交流. ??本文由Aileen_0v0?? 原創(chuàng) CSDN首發(fā)?? 如需轉(zhuǎn)載還請通知?? ??個人主頁:Aileen_0v0??—CSDN博客 ??歡迎各位→點贊?? + 收藏?? + 留言??? ??系列專欄:Aileen_0v0??

    2024年02月07日
    瀏覽(20)
  • 棧的OJ題(逆波蘭表達式求值+括號匹配+出入棧順序匹配+最小棧)

    棧的OJ題(逆波蘭表達式求值+括號匹配+出入棧順序匹配+最小棧)

    平時使用是算式是中綴表達式 逆波蘭表達式是一種后綴表達式,算符寫在后面。 優(yōu)點: 1.去掉括號后表達式無歧義 2.適合用棧操作運算:遇到數(shù)字則入棧;遇到算符則取出棧頂兩個數(shù)字進行計算,并將結(jié)果壓入棧中 3.中綴轉(zhuǎn)后綴:加上括號,將對應(yīng)的運算符放在括號外 1.題

    2024年02月08日
    瀏覽(33)
  • C語言-用棧實現(xiàn)表達式求值

    C語言-用棧實現(xiàn)表達式求值

    目錄 目的描述: 算法的基本思想: 錯誤點: 完整代碼: 1.輸入輸出 2.棧操作函數(shù)包(數(shù)組堆棧.h) 3.實現(xiàn)表達式求值函數(shù)包(表達式求值.c) 4.測試輸出: 算符優(yōu)先算法要實現(xiàn)的是,根據(jù)運算優(yōu)先關(guān)系來對一個表達式求值,假如說要計算: 4+2*3-10/5 運算的順序例如: 4+ 2*

    2023年04月10日
    瀏覽(26)
  • 數(shù)據(jù)結(jié)構(gòu)——基于二叉樹的表達式求值算法

    數(shù)據(jù)結(jié)構(gòu)——基于二叉樹的表達式求值算法

    1.輸入一個表達式(表達式中的數(shù)均小于10的正整數(shù)),利用二叉樹來表示該表達式,創(chuàng)建表達式數(shù),然后利用二叉樹的遍歷操作求表達式的值。 2.輸入要求:多組數(shù)據(jù),每組數(shù)據(jù)1行,為一個表達式,表達式以“=”結(jié)尾。當(dāng)輸入只有一個“=”時,輸入結(jié)束。 3.輸出要求:每組

    2024年02月04日
    瀏覽(20)
  • 表達式求值問題-雙棧模板化實現(xiàn)

    表達式求值問題-雙棧模板化實現(xiàn)

    ? ? ? ? 好久不見,真的很久都沒有更新博客了,最近很多事情,所以比較忙碌,沒有時間每天都學(xué)算法,但是我會擠時間盡量做到,每兩三天就更新博客,我會努力的,加油~ ? ? 前言:計算器都見過吧,我們今天要講的就是類似于計算器計算數(shù)據(jù)的簡單實現(xiàn),我們需要注

    2024年02月03日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)課程實驗二:運用棧實現(xiàn)表達式求值

    目錄 一、實驗?zāi)康?二、實驗內(nèi)容 三、實驗提示? 四、實驗思路

    2023年04月17日
    瀏覽(21)
  • 文本單詞查詢復(fù)合表達式求值的實現(xiàn)案例分析

    文本單詞查詢復(fù)合表達式求值的實現(xiàn)案例分析

    ????????本文討論的“ 文本單詞查詢復(fù)合表達式求值的實現(xiàn) ”案例,來自C++ primer第四版,該案例面向?qū)ο缶幊毯头盒途幊蹋?涉及類的繼承、抽象、多態(tài)、句柄、標準IO庫、容器、算法庫 ,是綜合性很強的程序 ????????該程序?qū)崿F(xiàn)文本中查找單個單詞,“非”查詢(使

    2024年01月23日
    瀏覽(12)
  • 【數(shù)據(jù)結(jié)構(gòu)】利用順序棧/鏈棧完成表達式求值(C語言實現(xiàn))

    【數(shù)據(jù)結(jié)構(gòu)】利用順序棧/鏈棧完成表達式求值(C語言實現(xiàn))

    利用順序棧完成表達式求值(將字符型轉(zhuǎn)換為整型) 程序代碼: #include stdio.h #include malloc.h #include stdlib.h #include math.h #define MAXSIZE 100 #define ElemType char #define LEN sizeof ( ElemType ) typedef struct { ??? ElemType * data; ??? int top; } SqStack ; void InitStack( SqStack * S ) { ??? S -data = ( ElemType *)

    2024年02月05日
    瀏覽(29)
  • Java算法題 給一個字符串表達式,實現(xiàn)一個基本計算器,返回計算結(jié)果

    題目: 考點:棧 解題思路: 使用 2 個棧,一個 stack_nums 用來保存計算過程的操作數(shù),一個 stack_symbol 用來保存運算符。 在HashMap中,指定加減優(yōu)先級為1,乘除優(yōu)先級為2 循環(huán)遍歷字符串s, 操作符入棧: 若當(dāng)前字符為\\\'+\\\', \\\'-\\\', \\\'*\\\', \\\'/\\\', \\\'(\\\' 時,壓入運算符棧 stack_symbol, 操作數(shù)入

    2024年02月07日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包