用棧解決有效的括號匹配問題

?

//用數組實現棧
typedef char DataType;
typedef struct stack
{DataType* a;//動態數組int top;//棧頂int capacity; //容量
}ST;void STInit(ST*pst);//初始化void STDestroy(ST* pst);//銷毀所有空間void STPush(ST* pst, DataType x);//插入數據到棧中void STPop(ST* pst);//數據跳出棧頂DataType SToPop(ST* pst);//訪問棧頂元素bool STEmpty(ST* pst);//判空函數int STSize(ST* pst);//記錄棧內有多少元素(有多少人)void STInit(ST* pst)//初始化
{assert(pst);pst->a = NULL; pst->capacity = 0;pst->top = 0;
}
void STDestroy(ST* pst)//銷毀所有空間
{assert(pst);free(pst->a);pst->a = NULL;pst->capacity = 0;pst->top = 0;
}
void STPush(ST* pst, DataType x)//插入數據到棧中
{assert(pst);if (pst->capacity == pst->top){int newcapacity = pst->capacity == 0 ? 4 : pst->capacity * 2;//是0就給4,不是0就乘2DataType* tmp = (DataType*)realloc(pst->a, sizeof(DataType) * newcapacity);//擴容好的數組地址if (tmp == NULL){perror("realloc fail");return;}pst->a = tmp;pst->capacity = newcapacity;}pst->a[pst->top] = x;//棧頂放入元素pst->top++;}void STPop(ST* pst)//數據跳出棧頂
{assert(pst);assert(!STEmpty(pst));pst->top--;
}DataType SToPop(ST* pst)//訪問棧頂元素
{assert(pst);assert(!STEmpty(pst));return pst->a[pst->top - 1];
}bool STEmpty(ST* pst)//判空函數
{assert(pst);return pst->top == 0; //等于0,bool就真了,
}int STSize(ST* pst)//記錄棧內有多少元素(有多少人)
{assert(pst);return pst->top;
}bool isValid(char * s){ST kit;STInit(&kit);while(*s){//1. 左括號入棧    '(', '[', '{'//2. 右括號出棧匹配 ')', ']', '}'//3.棧是空那就是匹配成功的,棧不是空就匹配失敗"([{ ])"//只要有一對不相等就返回falseif(*s == '(' ||*s == '{' ||*s == '['){STPush(&kit,*s);}else{if(STEmpty(&kit))//防止"[{}])"還在調用SToPop函數訪問造成越界訪問{return false;}char tmp =SToPop(&kit);STPop(&kit);if(*s == ')' && tmp != '(' || *s =='}'&& tmp != '{' || *s ==']' && tmp != '[' )//只要有一對不相等就返回false{return false;}}++s;} bool yesno = STEmpty(&kit);//棧是空那就是匹配成功的,棧不是空就匹配失敗"([{ ])"STDestroy(&kit);return yesno;
}

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

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

相關文章

【業務功能篇65】maven加速 配置settings.xml文件 鏡像

maven加速 添加阿里鏡像倉 <?xml version"1.0" encoding"UTF-8"?><!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additi…

Kubernetes 調度約束(親和性、污點、容忍)

目錄 一、Pod啟動典型創建過程 二、調度流程 三、指定調度節點 1.使用nodeName字段指定調度節點 2.使用nodeSelector指定調度節點 2.1給對應的node節點添加標簽 2.2修改為nodeSelector調度方式 3.通過親和性來指定調度節點 3.1節點親和性 3.2Pod親和性與反親和性 3.2…

Vue CLI創建Vue項目詳細步驟

&#x1f680; 一、安裝Node環境&#xff08;建議使用LTS版本&#xff09; 在開始之前&#xff0c;請確保您已經安裝了Node.js環境。您可以從Node.js官方網站下載LTS版本&#xff0c;以確保穩定性和兼容性。 中文官網下載 確認已安裝 Node.js。可以在終端中運行 node -v 命令…

基于STM32設計的中藥分裝系統

一、設計需求 基于STM32設計的中藥分裝系統 【1】項目背景 中藥文化是我國文化瑰寶之一,它具有療效好、副作用小的優點,而且相對于西藥,全天然的中藥還具有標本兼治的特點,不僅可以用來治病,更可以對患者身體進行調理,所以格外受到當今一直追求生活質量的人們的追捧&quo…

在Spring Boot和Vue中實現請求過濾器以驗證請求頭中的Token

在Spring Boot應用程序中創建一個過濾器類&#xff0c;用于處理請求&#xff1a; Component public class AuthenticationFilter implements Filter {Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException,…

FastAPI入門

目錄 FastAPI FastAPI 是什么 為什么要用 FastAPI FastAPI 入門 安裝 用 FastAPI 寫個接口 調試接口 創建快捷請求 保存為快捷請求 發送請求 總結 FastAPI FastAPI 是什么 什么是 FastAPI 呢&#xff1f; FastAPI 是 Python 的一個框架&#xff0c;如果要類比的話…

ros編譯catkin_make/catkin build 報錯“string no output variable specified”

文章目錄 問題描述問題分析問題描述 CMake Error at /opt/ros/melodic/share/catkin/cmake/platform/lsb.cmake:8 (string):string no output variable specified Call Stack (most recent call first):/opt/ros/melodic/share/catkin/cmake/all.cmake:164 (include)/opt/ros/…

Django的簡介安裝與配置及兩大設計模式

一.Djang的介紹 1.Django是什么 Django 是使用 Python 語言開發的一款免費而且開源的 Web 應用框架。 由于 Python 語言的跨平臺性&#xff0c;所以 Django 同樣支持 Windows、Linux 和 Mac 系統。 在 Python 語言熾手可熱的當下&#xff0c;Django 也迅速的崛起&#xff0c;在…

javaScript:一分鐘看懂數組排序以及冒泡排序(重點)

目錄 一.前言 二.數組排序 sort&#xff08;&#xff09; 字符串大小的比較原則 字符編碼排序規則 如果使用sort從小到大排列 &#xff08;重點&#xff09; 函數的返回值 規則&#xff1a; 代碼 案例 數組打亂 sort相關代碼 三.冒泡排序&#xff08;重點&#xff…

【RocketMQ】NameServer總結

NameServer是一個注冊中心&#xff0c;提供服務注冊和服務發現的功能。NameServer可以集群部署&#xff0c;集群中每個節點都是對等的關系&#xff08;沒有像ZooKeeper那樣在集群中選舉出一個Master節點&#xff09;&#xff0c;節點之間互不通信。 服務注冊 Broker啟動的時候會…

【通俗易懂】如何使用GitHub上傳文件,如何用git在github上傳文件

目錄 創建 GitHub 倉庫 使用 Git 進行操作 步驟 1&#xff1a;初始化本地倉庫 步驟 2&#xff1a;切換默認分支 步驟 3&#xff1a;連接到遠程倉庫 步驟 4&#xff1a;獲取遠程更改 步驟 5&#xff1a;添加文件到暫存區 步驟 6&#xff1a;提交更改 步驟 7&#xff1a…

Chrome 手動代理設置 HTTP/Socks5

1、安裝代理插件&#xff1a;SwitchyOmega 在線安裝 從 Chrome 應用商店 安裝&#xff0c;如果您無法從該鏈接安裝&#xff0c;請使用下面的離線安裝。 離線安裝 ①、去 Github 下載 最新版安裝包 &#xff0c;或者直接 本地下載 文件進行安裝。 ②、下載安裝文件后&#xf…

[Vue warn]: Error in render: “SyntaxError: “undefined“ is not valid JSON“

[Vue warn]: Error in render: “SyntaxError: “undefined” is not valid JSON” 這說明出現了undefined這個變量類型&#xff0c;比如JSON.parse()時候會出現&#xff0c;可以先嘗試打印JSON.parse()括號中的內容是否是undefined&#xff0c;如果是&#xff0c;那問題的根源…

RenderDoc 導出Cubemap到UE

找到使用了Cubemap的模型,再Output里會顯示該模型使用的所有貼圖 ,選中Cubemap導出 選擇導出格式為HDR 導出的Cubemap是豎著的,需要再PS里逆時針旋轉&#xff19;&#xff10;度 還有&#xff0c;導出的的Cubemap方向是錯的,需要把3,4 跟1,2 對換,6旋轉180度 UE 文檔里的方向參…

Spring Boot @Validated 驗證注解的使用

1、引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 2、使用 2.1、非對象參數 參數如果是非對象格式&#xff0c;需要在controller類上面添…

JVM——HotSpot的算法細節實現

一、根節點枚舉 固定可作為GC Roots的節點主要在全局性的引用&#xff08;如常量或類靜態屬性&#xff09;與執行上下文&#xff08;如棧幀中的本地變量表&#xff09;中&#xff0c;盡管目標明確&#xff0c;但查找要做到高效很難。現在java應用越來越龐大&#xff0c;光方法區…

Code interpreter生成無聊的APP:病理圖像切割和提取

一、寫在前面 機器學習100步不夠分配了&#xff0c;所以開個新專欄&#xff0c;就叫做《Code interpreter生成無聊的APP》&#xff0c;旨在探索GPT-4官方插件Code interpreter的使用心路歷程。 主要靈感來源&#xff1a;聽戶主說&#xff0c;她們在做病理組學圖像標注和分割的…

如何用Apipost實現sign簽名?

我們平常對外的接口都會用到sign簽名&#xff0c;對不同的用戶提供不同的apikey ,這樣可以提高接口請求的安全性&#xff0c;避免被人抓包后亂請求。 如何用Apipost實現sign簽名&#xff1f; 可以在Apipost中通過預執行腳本調用內置的JS庫去實現預執行腳本是在發送請求之前自…

Wordcloud | 風中有朵雨做的‘詞云‘哦!~

1寫在前面 今天可算把key搞好了&#xff0c;不得不說&#x1f3e5;里手握生殺大權的人&#xff0c;都在自己的能力范圍內盡可能的難為你。&#x1f602; 我等小大夫也是很無奈&#xff0c;畢竟奔波霸、霸波奔是要去抓唐僧的。 &#x1f910; 好吧&#xff0c;今天是詞云&#x…

【C++精華鋪】8.C++模板初階

目錄 1. 泛型編程 2. 函數模板 2.1 函數模板的概念及格式 2.2 函數模板的原理 2.3 模板的實例化 2.4 模板參數的匹配原則 3. 類模板 3.1 類模板格式 3.2 類模板的實例化 1. 泛型編程 什么是泛型編程&#xff1f;泛型編程是避免使用某種具體類型而去使用某種通用類型來進行…