棧就是一種後進先出的資料結構。
一般都有乙個棧頂指標,指向棧的最上面的乙個元素,
當用陣列實現堆疊的時候,棧頂指標就是乙個int型的變數,當沒有元素的時候記為-1,第乙個元素為0,用top來表示。當用鍊錶來實現棧的時候,則是乙個int*型的指標
typedef int position;
struct snode ;
typedef struct snode *stack;
stack createstack( int maxsize )
bool isfull( stack s )
bool push( stack s, elementtype x )
else }
bool isempty( stack s )
elementtype pop( stack s )
else
return ( s->data[(s->top)--] );
}
typedef struct snode *ptrtosnode;
struct snode ;
typedef ptrtosnode stack;
stack createstack( )
bool isempty ( stack s )
bool push( stack s, elementtype x )
elementtype pop( stack s )
else
}
stl庫stack的常見用法
stackname;
st.push(i); //將i壓入棧
st.top(); //獲得棧頂元素
st.pop(); //用以彈出棧頂元素
st.empty(); //返回true為空,返回false為非空
st.size(); //大小
//在使用top()和pop()函式之前必須先用empty()判斷棧是否空
//stl沒有實現棧的清空,可以用while迴圈pop出元素
while(!st.empty())
a1051
#include#includeusing namespace std;
const int maxn=1010;
int arr[maxn]; //儲存題目給定的出棧序列
stackst; //定義棧st,用以存放int型元素
int main()
for(int i=1;i<=n;i++) //讀入資料
int current=1; //指向出棧序列中的待出棧元素
bool flag=true;
for(int i=1;i<=n;i++)
//棧頂元素與出棧序列當前位置的元素相同時
while(!st.empty()&&st.top()==arr[current])
}if(st.empty()==true&&flag==true)else
}return 0;
}
7 1 棧的應用
6.8 stack的常見用法詳解與此節題目相同 emmmmm 注釋很清楚,標註 的地方都是寫 的時候漏掉的,要注意!一開始沒有寫node結構體,但是考慮到如果不管運算元還是操作符都用char表示的話,運算元最大為127而且不能有浮點數,這顯然是不可能的,所以還是改成了node結構體。書p147也有此...
PTA 7 1 列車廂排程(棧的應用)
題目點我 樣例如圖 1 3軌道都可以看成是棧,不論是1軌還是3軌都應該讓棧頂指向車廂在軌道的移動方向 因為棧的優點是在棧頂插入和刪除元素很方便,反過來的話 寫起來會很麻煩 結合圖和題目要求的輸入,兩個輸入都應該逆序入棧 1.先定義乙個標記int flag 1 假定按輸入的排程方式不會出現問題。當出問...
棧 71 簡化路徑
以 unix 風格給出乙個檔案的絕對路徑,你需要簡化它。或者換句話說,將其轉換為規範路徑。在 unix 風格的檔案系統中,乙個點 表示當前目錄本身 此外,兩個點 表示將目錄切換到上一級 指向父目錄 兩者都可以是複雜相對路徑的組成部分。更多資訊請參閱 linux unix中的絕對路徑 vs 相對路徑 ...