假設一個算術表達式中包含圓括號、方括號和花括號3種類型的括號,編寫一個算法來判別,表達式中的括號是否配對,以字符“\0“作為算術表達式的結束符

思想:這道題是棧的應用類型,我們可以建立一個棧來保存'(','[','{',通過遍歷字符串如果是三個左括號其中一個則入棧,當遇到')'']''}'則出棧配對,如果左右匹配,則遍歷下一個元素,如果不匹配直接返回,如果遍歷字符串結束,但棧中還有元素,則是左符號單身,如果已經空棧,但是又遍歷到一個右括號,則是右括號單身

具體代碼:

#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>
typedef struct LinkStack
{
char data;
struct LinkStack* next;
}LinkStack;
void InitStack(LinkStack** S)//初始化棧(不帶頭結點鏈表實現)
{
(*S) = NULL;
return;
}
bool Push(LinkStack** S,char ch)//入棧
{
if (ch == '(' || ch == '[' || ch == '{')
{
LinkStack* p = (LinkStack*)malloc(sizeof(LinkStack));
if (p == NULL)
return false;
//第一次入棧
if ((*S) == NULL)
{
p->data = ch;
p->next = NULL;
(*S) = p;
}
//后續入棧
else
{
p->data = ch;
p->next = (*S);
(*S) = p;
}
}
return true;

}
bool Pop(LinkStack** S)//出棧并且帶回元素
{
if ((*S) == NULL)//空棧無法出棧
return false;
LinkStack* p = (*S);
//*x = p->data;
(*S) = p->next;
free(p);
return true;
}
LinkStack* GetTop(LinkStack* S)//返回棧頂指針
{
if (S == NULL)//空棧
return NULL;
LinkStack* p = S;
return p;
}
bool EmptyStack(LinkStack* S)//判斷空棧
{
if (S == NULL)
return true;
return false;
}
void JudgeStack(LinkStack **S,char arr[])//判斷
{
char* a = arr;
while (*a != '\0')
{
if (*a == '(' || *a == '[' || *a == '{')//如果當時是三個括號其中一個則入棧
Push(S, *a);
else if (EmptyStack(*S) == false && *a == ')' && GetTop((*S))->data == '(')//如果是'('則出棧
Pop(S);
else if (EmptyStack(*S) == false && *a == ')' && GetTop((*S))->data != '(')//如果不是則直接退出
{
printf("配對失敗\n");
printf("%c %c\n",*a, GetTop((*S))->data);
return;
}
else if (EmptyStack(*S) == false && *a == ']' && GetTop((*S))->data == '[')//如果是'['則出棧
Pop(S);
else if (EmptyStack(*S) == false && *a == ']' && GetTop((*S))->data != '[')
{
printf("配對失敗\n");
printf("%c %c\n", *a, GetTop((*S))->data);
return;
}
else if (EmptyStack(*S) == false && *a == '}' && GetTop((*S))->data == '{')//如果是'{'則出棧
Pop(S);
else if (EmptyStack(*S) == false && *a == '}' && GetTop((*S))->data != '{')
{
printf("配對失敗\n");
printf("%c %c\n", *a, GetTop((*S))->data);
return;
}
else if (EmptyStack(*S) == true && (*a == ')' || *a == ']' || *a == '}'))//如果棧為空,且字符串中還有元素
printf("右括號單身\n");
a++;//向后遍歷字符串

?? ?}
if (EmptyStack(*S) == false)//如果字符串已遍歷結束但棧里還有元素
printf("左括號單身\n");
else
printf("配對成功\n");
return;
}
int main()
{
char arr[] = "[(3 + 2) * 5 + 3](]()";
LinkStack* S;//指向棧的指針
InitStack(&S);//初始化棧
JudgeStack(&S , arr);
return 0;
}

注:此代碼中運用了大量的if-else語句,不是很美觀(其實懶得改了),大家如果要引用可以自行優化代碼

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

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

相關文章

鴻蒙Next的UI國際化與無障礙適老化實踐:構建全球包容的數字世界

科技不應讓任何人掉隊&#xff0c;鴻蒙Next正將這一理念變為現實在全球化日益深入的今天&#xff0c;應用的國際化與無障礙設計不再是"錦上添花"&#xff0c;而是不可或缺的核心競爭力。華為鴻蒙Next系統從設計之初就深入考慮了這些需求&#xff0c;為開發者提供了完…

深度學習——遷移學習

遷移學習作為深度學習領域的一項革命性技術&#xff0c;正在重塑我們構建和部署AI模型的方式。本文將帶您深入探索遷移學習的核心原理、詳細實施步驟以及實際應用中的關鍵技巧&#xff0c;幫助您全面掌握這一強大工具。遷移學習的本質與價值遷移學習的核心思想是"站在巨人…

RAG|| LangChain || LlamaIndex || RAGflow

大模型&#xff1a;預訓練模型 外掛知識庫&#xff1a;知識庫->向量數據庫 輸入-》預處理成向量 提示詞-》llm歸納總結 離線&#xff1a;企業原文本存到向量數據庫 向量&#xff1a; 同一個向量模型&#xff08;第二代檢索&#xff0c;推薦&#xff0c;個人助理&#xff0c;…

mcp_clickhouse代碼學習

引言:當ClickHouse遇上MCP 作為一個基于Model Context Protocol(MCP)框架的ClickHouse查詢服務器,mcp_clickhouse不僅在技術實現上展現了優雅的設計思路,更在架構層面提供了許多值得借鑒的解決方案。 一、項目概覽:架構初探 mcp_clickhouse是一個專為ClickHouse數據庫設計…

前端三件套+springboot后端連通嘗試

本文承接自跨域請求問題淺解-CSDN博客 后端&#xff1a; //主啟動類 SpringBootApplication public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}} //控制類 RestController RequestMapping(&quo…

決策樹、ID3決策樹(信息熵、信息增益)

目錄 一、決策樹簡介 決策樹建立過程 二、ID3決策樹 核心思想&#xff1a;決策樹算法通過計算??信息增益??來選擇最佳分裂特征 1、信息熵 2、信息熵的計算方法 3、信息增益 4、信息增益的計算&#xff08;難點&#xff09; 5、ID3決策樹構建案例 三、總結 一、決策樹簡介 決…

SpringBoot文件下載(多文件以zip形式,單文件格式不變)

SpringBoot文件下載&#xff08;多文件以zip形式&#xff0c;單文件格式不變&#xff09;初始化文件服務器&#xff08;我的是minio&#xff09;文件下載# 樣例# # 單文件# # 多文件初始化文件服務器&#xff08;我的是minio&#xff09; private static MinioClient minioClie…

【C++題解】貪心和模擬

4小時編碼練習計劃&#xff0c;專注于貪心算法和復雜模擬題&#xff0c;旨在鍛煉您的算法思維、代碼實現能力和耐心。 下午 (4小時): 貪心思維與代碼實現力 今天的重點是兩種在算法競賽和工程中都至關重要的能力&#xff1a;貪心選擇和復雜邏輯的精確實現。貪心算法考察的是能否…

JS多行文本溢出處理

在網頁開發中&#xff0c;多行文本溢出是常見的界面問題。當文本內容超出容器限定的高度和寬度時&#xff0c;若不做處理會破壞頁面布局的整潔性&#xff0c;影響用戶體驗。本文將詳細介紹兩種主流的多行文本溢出解決方案&#xff0c;并從多個維度進行對比&#xff0c;幫助開發…

C++(Qt)軟件調試---bug排查記錄(36)

C(Qt)軟件調試—bug排查記錄&#xff08;36&#xff09; 文章目錄C(Qt)軟件調試---bug排查記錄&#xff08;36&#xff09;[toc]1 無返回值函數風險2 空指針調用隱患3 Debug/Release差異4 ARM架構char符號問題5 linux下找不到動態庫更多精彩內容&#x1f449;內容導航 &#x1…

人工智能領域、圖歐科技、IMYAI智能助手2025年8月更新月報

IMYAI 平臺 2025 年 8 月功能更新與模型上新匯總 2025年08月31日 功能更新&#xff1a; 對話與繪畫板塊現已支持多文件批量上傳。用戶可通過點擊或拖拽方式一次性上傳多個圖片或文件&#xff0c;操作更加便捷。2025年08月25日近期更新亮點&#xff1a; 文檔導出功能增強&#x…

2025獨立站技術風向:無頭電商+PWA架構實戰指南

根據 Gitnux 的統計數據&#xff0c;預計到 2025 年&#xff0c;北美將有 60% 的大型零售商采用無頭平臺。而仍在傳統架構上運營的獨立站&#xff0c;平均頁面加載速度落后1.8秒&#xff0c;轉化率低32%。無獨有偶&#xff0c;Magento Association 的一項調查顯示&#xff0c;7…

淘寶京東拼多多爬蟲實戰:反爬對抗、避坑技巧與數據安全要點

一、先搞懂&#xff1a;電商爬蟲的 3 大核心挑戰&#xff08;比普通爬蟲更復雜的原因&#xff09; 做電商爬蟲前&#xff0c;必須先明確「為什么難」—— 淘寶、京東、拼多多的反爬體系是「多層級、動態化、行為導向」的&#xff0c;絕非簡單的 UA 驗證或 IP 封禁&#xff1a;…

【1】MOS管的結構及其工作原理

以nmos舉例&#xff0c;mos管由三個電極&#xff1a;G極&#xff08;gate&#xff09;、D極&#xff08;drain&#xff09;、S極&#xff08;source&#xff09;和一個襯底組成&#xff0c;而這三個電極之間通過絕緣層相隔開&#xff1b;①既然GDS三個電極之間兩兩相互絕緣&…

如何保存訓練的最優模型和使用最優模型文件

一 保存最優模型主要就是我們在for循環中加上一個test測試&#xff0c;并且我還在test函數后面加上了返回值&#xff0c;可以返回準確率&#xff0c;然后每次進行一次對比&#xff0c;然后取大的。然后這里有兩種保存方式&#xff0c;一種是保存了整個模型&#xff0c;另一個是…

vue3+ts+echarts多Y軸折線圖

因為放在了子組件才監聽&#xff0c;加載渲染調用&#xff0c;有暗黑模式才調用&#xff0c;<!-- 溫濕度傳感器 --><el-row v-if"deviceTypeId 2"><el-col :xs"24" :sm"24" :md"24" :lg"24" :xl"24&qu…

基于Taro4打造的一款最新版微信小程序、H5的多端開發簡單模板

基于Taro4、Vue3、TypeScript、Webpack5打造的一款最新版微信小程序、H5的多端開發簡單模板 特色 &#x1f6e0;? Taro4, Vue 3, Webpack5, pnpm10 &#x1f4aa; TypeScript 全新類型系統支持 &#x1f34d; 使用 Pinia 的狀態管理 &#x1f3a8; Tailwindcss4 - 目前最流…

ITU-R P.372 無線電噪聲預測庫調用方法

代碼功能概述&#xff08;ITURNoise.c&#xff09;該代碼是一個 ITU-R P.372 無線電噪聲預測 的計算程序&#xff0c;能夠基于 月份、時間、頻率、地理位置、人為噪聲水平 計算特定地點的 大氣噪聲、銀河噪聲、人為噪聲及其總和&#xff0c;并以 CSV 或標準輸出 方式提供結果。…

《從報錯到運行:STM32G4 工程在 Keil 中的頭文件配置與調試實戰》

《從報錯到運行&#xff1a;STM32G4 工程在 Keil 中的頭文件配置與調試實戰》文章提綱一、引言? 闡述 STM32G4 在嵌入式領域的應用價值&#xff0c;說明 Keil 是開發 STM32G4 工程的常用工具? 指出頭文件配置是 STM32G4 工程在 Keil 中開發的關鍵基礎環節&#xff0c;且…

Spring 事務提交成功后執行額外邏輯

1. 場景與要解決的問題在業務代碼里&#xff0c;常見訴求是&#xff1a;只有當數據庫事務真正提交成功后&#xff0c;才去執行某些“后置動作”&#xff0c;例如&#xff1a;發送 MQ、推送消息、寫審計/埋點日志、刷新緩存、通知外部系統等。如果這些動作在事務提交前就執行&am…