本篇開始學習棧,首先棧這種資料結構是一種後進先出的結構,棧限定為只能在一段進行刪除或插入操作。
比如我們要插入2 3 1三個數,按照2 3 1 的順序插入叫做入棧,出棧的順序就是1 3 2。
現在嘗試寫乙個判斷回文串的程式。
/*
*這裡講述用棧的思想來判斷回文串,
*主要思路是取字串的前半截入棧,
*然後確定要匹配的字串後半截下標,逆序將棧與字串匹配
**/#includeusing namespace std;
int main ()
//判斷mid前的字元長度是奇數還是偶數,並找出需要進行字元匹配的起始下標。
if (len % 2 == 0)
else next = mid + 2;
//開始匹配
for(int i = next; i <= len - 1; i++)
top--;
}//如果top的值為0,則說明棧內所有的字元都被一一匹配了
if(top == 0)
else cout << "no" << endl;
return 0;
}
現在,再了解乙個東西
逆波蘭表示法
參照《挑戰程式設計競賽2》的例子:
(1 + 2) * (5 + 4)用逆波蘭表示法就是1 2 + 5 4 + *
它的優勢就是不需要括號,現在寫乙個程式來模擬逆波蘭表示法
這兩個逆波蘭表示法的**必須ctrl+z終止才能出結果
這兩個逆波蘭表示法的**必須ctrl+z終止才能出結果
這兩個逆波蘭表示法的**必須ctrl+z終止才能出結果
#include#include#includeusing namespace std;
int top, s[1000];
void push (int x)
int pop ()
int main ()
else if(s[0] == '-')
else if(s[0] == '*')
else push(atoi(s));//atoi()是標準庫的函式,用來將字串形式的數字轉換成整型的數值
}cout << pop() << endl;
return 0;
}
接下來就是標準庫了
#include#includeusing namespace std;
int main()
return 0;
}
函式名
功能複雜度
size()
返回棧的元素數
o(1)
top()
返回棧頂的元素
o(1)
pop()
從棧中取出並刪除元素
o(1)
push(x)
向棧中新增元素x
o(1)
empty()
在棧為空時返回true
o(1)
用標準庫實現
#include#include#includeusing namespace std;
int main()
else if(c[0] == '-')
else if(c[0] == '*')
else
}cout << s.top() << endl;
return 0;
}
資料結構之棧篇
關於棧 棧對應的操作 實現棧介面的實現 棧介面 author wbkearly param 棧中元素型別 public inte ce stack 基於自己實現的陣列類來實現棧的相關操作 arraystack 這裡的array類是在我之前部落格中所建立的array類,由於array中的操作已經非常的...
C語言資料結構之棧篇
定義 只允許在一端插入和刪除的線性表 允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 特點後進先出 lifo adt stack 棧的應用舉例 棧在表示式計算過程中的應用 建立運算元棧和運算子棧。運算子有優先順序。規則 自左至右掃瞄表示式,凡是遇到運算元一律進運算元棧。當遇到運算...
計算與資料結構篇 棧 佇列
後進者先出,先進者後出,這就是典型的棧的結構。在生活中刷碗的時候,一摞摞盤子,小時候的玩具槍都有點類似棧這個結構。從棧的操作特性上來看,棧是一種 操作受限 的線性表,只允許在一端插入和刪除資料。有時也有所困惑,陣列和鍊錶的結構已經非常方便快捷了,為什麼還需要棧這個結構呢?棧是為當某個資料集合只涉及在...