顯然,由於只能對一端進行操作,棧中的元素是先進後出的。
棧的寫法:
手寫棧
int s[n],sz; //s[i]表示棧中從下往上數第i個數的值,n表示棧的大小,sz表示當前棧中元素數量
void push(int x)
void pop()
int top()
stl
stacks; //引數也是資料型別,這是棧的定義方式
s.empty() //如果棧為空返回1,否則返回0
s.size() //返回棧中元素的個數
s.pop() //刪除棧頂元素但不返回其值
s.top() //返回棧頂的元素,但不刪除該元素
s.push(x) //在棧頂壓入新元素 ,引數x為要壓入的元素
棧的應用
表示式求值
給定乙個表示式,求表示式的值或其他東西,是乙個比較常見的棧的應用。
一般利用棧先進後出的性質,從左往右掃一遍表示式,以便於滿足計算的優先順序。
例題:luogup1981 表示式求值。
字首表示式,中綴表示式,字尾表示式の相互轉換
這個也是棧的經典應用,本質上和表示式求值是差不多的。
例題:luogup1175 表示式的轉換
輔助棧顧名思義,乙個棧不夠用了,需要更多的棧輔助。
常常是需要記錄原棧中數的一些資訊,而原棧無法實現,如最大值最小值,所以需要新開額外的輔助棧輔助記錄資訊。
例題:acwing41 包含min函式的棧
單調棧單調棧內元素保證單調性,常用來維護乙個數前/後第乙個大/小於它的數。
例題:luogup5788 【模板】單調棧
棧 學習筆記
1.實現乙個棧,支援入棧,出棧,查詢棧中最小值的功能,時間複雜度要求為常數 用陣列模擬棧操作 查詢最小值的話可以另外使用乙個陣列記錄當前下標的最小值 includeusing namespace std const int maxn 1e5 struct queue void push int x ...
棧 學習筆記 總結
棧 stack 是限制插入和刪除只能在乙個位置上進行的表,該位置是表的末端,叫做棧的頂。對棧的基本操作有push 進棧 和 pop 出棧 前者相當於插入,後者則是刪除最後插入的元素。所以棧有時叫做lifo 後進先出 表。part 1 棧的基本了解 對棧的第一次接觸也是在c語言的學習中。不同的資料存放...
棧溢位學習筆記
棧溢位 一 原理 棧溢位指的是程式向棧中某個變數中寫入的位元組數超過了這個變數本身所申請的位元組數,因而導致與其相鄰的棧中的變數的值被改變。這種問題是一種特定的緩衝區溢位漏洞,類似的還有堆溢位,bss 段溢位等溢位方式。棧溢位漏洞輕則可以使程式崩潰,重則可以使攻擊者控制程式執行流程。此外,我們也不難...