數據結構(3.8)——棧的應用

棧在括號匹配中的應用

流程圖

代碼

#include <stdio.h>
#include <stdlib.h>
#define MaxSize 10typedef struct {char data[MaxSize];int top;
} SqStack;// 初始化棧
void InitStack(SqStack* S) {S->top = -1; // 初始化棧頂指針
}// 判空
bool StackEmpty(SqStack* S) {if (S->top == -1) {return true;} else {return false;}
}// 入棧
bool Push(SqStack* S, char x) {if (S->top == MaxSize - 1) { // 棧滿,報錯return false;} else {S->top = S->top + 1; // 指針先加1S->data[S->top] = x; // 新元素入棧return true;}
}// 出棧
bool Pop(SqStack* S, char* x) {if (StackEmpty(S)) {return false;} else {*x = S->data[S->top]; // 棧頂元素先出棧S->top = S->top - 1; // 指針減1return true;}
}// 括號匹配檢查
bool bracketCheck(char str[], int length) {SqStack S;InitStack(&S); // 初始化一個棧for (int i = 0; i < length; i++) {if (str[i] == '(' || str[i] == '[' || str[i] == '{') {Push(&S, str[i]); // 掃描到左括號,入棧} else {if (StackEmpty(&S)) { // 掃描到右括號,且當前棧空return false; // 匹配失敗}char topElem;Pop(&S, &topElem); // 棧頂元素出棧if (str[i] == ')' && topElem != '(') {return false;}if (str[i] == ']' && topElem != '[') {return false;}if (str[i] == '}' && topElem != '{') {return false;}}}return StackEmpty(&S); // 檢索全部括號后,棧空說明匹配成功
}int main() {char str[] = "{([()])}";int length = sizeof(str) / sizeof(str[0]) - 1; // 計算字符串長度,減1是為了去掉結尾的'\0'if (bracketCheck(str, length)) {printf("括號匹配成功\n");} else {printf("括號匹配失敗\n");}return 0;
}

棧在表達式求值中的應用

中綴、后綴、前綴表達式

中綴表達式

運算符在兩個操作數中間:

  1. a + b
  2. a + b - c
  3. a + b - c * d

后綴表達式

運算符在兩個操作數后面:

  1. ab +
  2. ab + c-或者a bc - +
  3. ab + cd * -

前綴表達式

運算符在兩個操作數前面:

  1. + ab
  2. - + ab c
  3. - + ab * cd

中綴表達式轉后綴表達式(手算)

  1. 確定中綴表達式中各個運算符的運算順序
  2. 選擇下一個運算符,按照[左操作數 右操作數 運算符]的方式組合成一個新的操作數(若運算順序不唯一,則后綴表達式也不唯一)
  3. 如果還有運算符沒被處理,就繼續2步驟

例:

轉換成后綴表式:? ? ? ? ? 15?7 11+ - / 3 *? 2 11 + + -

"左優先"原則:只要左邊的運算符能先計算,就優先計算左邊的(可保證運算唯一)

后綴表達式的計算(手算)

從左往右掃描,每遇到一個運算符,就讓運算符前面最近的兩個操作數執行對應運算,合體為一個操作數

注意:兩個操作數的左右順序

后綴表達式的計算(機算)

用棧實現后綴表達式的計算:

  1. 從左往右掃描下一個元素,直到處理完所以元素
  2. 若掃描到操作數則壓入棧,并回到1;否則執行3
  3. 若掃描到運算符,則彈出兩個棧頂元素,執行相應運算,運算結果壓回棧頂,回到1

注意:后綴表達式先彈出的元素是‘右操作數’

入棧流程:

?中綴表達式轉前綴表達式(手算)

  1. 確定中綴表達式中各個運算符的運算順序
  2. 確定下一個運算符,按照[運算符 左操作數 右操作數]的方式組合成一個新的操作數
  3. 如果還有運算符沒被處理,就繼續2

"右優先"原則:只要右邊的運算符能先計算,就優先算右邊

前綴表達式的計算

  1. 從右往左掃描下一個元素,直到處理完所有元素
  2. 若掃描到操作數則壓入棧,并回到1;否則執行3
  3. 若掃描到運算符,則彈出兩個棧頂元素,執行相應運算,運算結構壓回棧頂,回到1

注意前綴表達式先彈出的元素是‘左操作數’

總結

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/40964.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40964.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/40964.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Apache Hadoop完全分布式集群搭建指南

Hadoop發行版本較多,Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,簡稱CDH)收費版本通常用于生產環境,這里用開源免費的Apache Hadoop原始版本。 下載:Apache Hadoop 版本下載:Index of /hadoop/common Hadoop基礎知識可查看本專欄其它篇章:Apac…

《米小圈日記魔法》邊看邊學,輕松掌握寫日記的魔法!

在當今充滿數字化娛樂和信息快速變遷的時代&#xff0c;如何創新引導孩子們學習&#xff0c;特別是如何培養他們的寫作能力&#xff0c;一直是家長和教育者們關注的焦點。今天就向大家推薦一部寓教于樂的動畫片《米小圈日記魔法》&#xff0c;該系列動畫通過其獨特的故事情節和…

Linux安裝ftp、Java的FTP上傳下載文件工具類

Linux安裝ftp、Java的FTP上傳下載文件工具類 文章說明Linux安裝vsftpdJava的工具類 文章說明 網上找到說linux安裝ftp&#xff0c;采用vsftpd&#xff0c;在后續的配置中少了一些說明&#xff0c;給我折磨了許久&#xff0c;寫下這篇文章來記錄 Linux安裝vsftpd 命令非常簡單&a…

vue通過后臺返回的數字顯示不同的文字內容,多個內容用、隔開

后臺返回的數據 顯示效果&#xff1a; html&#xff1a; <el-table-columnalign"center"label"使用過的小程序"width"124"v-if"activeTab 0"><template #default"scope"><divv-for"(item, index) in s…

數據結構(3.5)——隊列的順序實現

隊列的順序實現 #define MaxSize 10//定義隊列中元素的最大個數 typedef struct {int data[MaxSize];//用靜態數組存放隊列元素int front, rear;//隊頭指針和隊尾指針 } SqQueue;void testQueue() {SqQueue Q;//聲明一個隊列(順序存儲) } 隊列的初始化操作和判空 //初始化隊…

大模型面試題目

1.為什么需要做位置編碼 位置編碼&#xff08;Positional Encoding&#xff09;在變換器&#xff08;Transformer&#xff09;模型中非常重要&#xff0c;因為變換器架構本身沒有內置的順序信息。變換器使用的是自注意力機制&#xff0c;它能夠捕捉輸入序列中所有詞之間的相關性…

論文解析——Transformer 模型壓縮算法研究及硬件加速器實現

作者及發刊詳情 鄧晗珂&#xff0c;華南理工大學 摘要 正文 實驗平臺 選取模型&#xff1a; T r a n s f o r m e r b a s e Transformer_{base} Transformerbase? 訓練數據集&#xff1a;WMT-2014 英語-德語翻譯數據集、IWSLT-2014 英語-德語互譯數據集 Transformer模…

JVM垃圾回收性能調優實戰指南

JVM垃圾回收性能調優實戰指南 一、引言 在Java應用程序中&#xff0c;垃圾回收&#xff08;Garbage Collection, GC&#xff09;是自動管理內存的重要機制。然而&#xff0c;不恰當的垃圾回收配置可能導致性能瓶頸&#xff0c;如頻繁的GC暫停、內存碎片過多等。因此&#xff…

kpatch制作內核熱補丁步驟總結

零、原理及參考 kpatch入門實踐教程-CSDN博客 Kpatch 使用過程及其原理-CSDN博客 一、準備工作 安裝對應版本的kpatch-build.rpm并解決依賴diff -Naur dir1 dir2 > hot.patch 拿到補丁文件下載對應內核版本的src.rpm安裝好對應的開發包kernel-debuginfo&#xff0c;kern…

從GPT-1到GPT-3 預訓練語言模型的演進與突破

本文由 ChatMoney團隊出品 前言 Generative Pre-trained Transformer&#xff08;GPT&#xff09;系列是由OpenAI開發的預訓練語言模型&#xff0c;它們在多種NLP任務中取得了令人矚目的成績&#xff0c;包括文章生成、代碼生成、機器翻譯和問答等。GPT系列模型的核心思想是通…

數據庫開發:mysql基礎一

文章目錄 數據庫開發Day15&#xff1a;MySQL基礎&#xff08;一&#xff09;一、MySQL介紹與安裝【1】MySQL介紹&#xff08;5&#xff09;啟動MySQL服務&#xff08;6&#xff09;修改root登陸密碼 二、SQL簡介三、數據庫操作四、數據表操作4.1、數據庫數據類型4.2、創建數據表…

對標 GPT-4o 的開源實時語音多模態模型:Moshi

是由法國的 AI 實驗室 Kyutai 推出的實時語音多模態模型&#xff0c;支持聽、說、看&#xff0c;最關鍵的是你現在就可以在瀏覽器中使用&#xff0c;如果這個鏈接延遲高&#xff0c;可以試試這個, 無需輸入郵箱&#xff0c;點擊 Join queue 即可。 簡單體驗了下&#xff0c;比…

#### golang中【堆】的使用及底層 ####

聲明&#xff0c;本文部分內容摘自&#xff1a; Go: 深入理解堆實現及應用-騰訊云開發者社區-騰訊云 數組實現堆 | WXue 堆&#xff08;Heap&#xff09;是實現優先隊列的數據結構&#xff0c;Go提供了接口和方法來操作堆。 應用 package mainimport ("container/heap&q…

結構方程模型-驗證性因子分析模型

初級 第7講 驗證性因子分析模_嗶哩嗶哩_bilibili

使用 ESP32 接收來自 MAX4466 模擬麥克風模塊的數據,并通過 DAC 輸出模擬音頻信號,可以通過以下步驟實現:

硬件準備 ESP32 開發板MAX4466 模擬麥克風模塊揚聲器或耳機接線 MAX4466 模塊輸出(AO) -> ESP32 ADC 引腳(如 GPIO 34)ESP32 DAC 引腳(如 GPIO 25 或 GPIO 26) -> 揚聲器或耳機軟件準備 音頻采集DAC 轉碼并播放代碼實現 以下代碼展示了如何從 MAX4466 讀取模擬音頻…

【Go語言入門學習筆記】Part7.閉包和defer關鍵字

一、前言 閉包有點像對象&#xff0c;而defer適合于類似功能中利用資源時&#xff0c;提前寫幾句defer 釋放資源&#xff0c;防止后面釋放資源忘記寫釋放資源。 二、學習代碼 package mainimport ("fmt" )// getC的返回值是一個函數&#xff0c;需要的參數為空&…

GitHub Pull Request流程詳解

GitHub Pull Request流程詳解 在協作開發中&#xff0c;GitHub的Pull Request&#xff08;PR&#xff09;功能至關重要&#xff0c;它允許開發者在代碼庫中進行修改、審查和合并代碼。本文將詳細介紹GitHub Pull Request的完整流程&#xff0c;幫助你更好地理解和使用這一強大…

網絡安全的十字路口:向“架構化”轉移

市場條件正在快速變化 針對上述這些問題&#xff0c;在這段時間里&#xff0c;安全技術供應商推出了許多技術解決方案&#xff0c;比如SIEM、SOAR、XDR、UEBA等&#xff0c;但新產品的推出并未使得安全態勢有所好轉&#xff0c;許多問題依然存在&#xff0c;這導致了市場動態的…

【DevOps】Java內存分配與JVM參數詳解

目錄 引言 JVM內存結構 JVM參數概述 堆內存分配 年輕代與老年代 調整堆內存大小 調整年輕代與老年代比例 元空間分配 調整元空間大小 垃圾回收 調整GC參數 調整GC日志 線程棧分配 調整線程棧大小 性能調優 結論 在Java開發中&#xff0c;理解Java虛擬機&#x…

claude3.5寫作——《基于灰色預測的中國人口數量預測》

文章目錄 站點和提問引言一、灰色預測模型介紹二、中國歷年人口數據三、灰色預測模型的建立1.建立原始序列2.生成1-AGO序列3.計算背景值4.構造數據矩陣并計算參數5.模型檢驗6.模型預測 四、預測結果分析五、政策建議結語參考文獻 站點和提問 站點&#xff1a;中國官方克勞德3.…