⑴ 2、 定義一個類模板MyStack,具有棧操作的常用方法,如下所示(不必具體實現):
所謂棧 等數據結構都不是系統自帶的數據類型 是抽象數據類型(ADT) 它們再邏輯上可以形象地理解 比如棧就是後進先出 類似籮筐 但實現它還是要物理上得以實現 這就要你自己寫該結構的屬性(數據) 和方法(操作)了
所謂定義一個棧就是定義了一個類
tpyedef class stack
{
....
}
其中包括數組s[]存放數據 然後一個 int l 表示棧頂 再定義各個操作等等 邏輯上講是一個數據結構 實際上就是一個class 樓主理解了吧? 你自己寫的類當然不能算系統的保留字 自然就沒有反色等顯示了
⑵ 什麼是堆棧堆棧的操作方式有哪兩種
堆棧是一種執行「後進先出」演算法的數據結構。
堆棧就是這樣一種數據結構。它是在內存中開辟一個存儲區域,數據一個一個順序地存入(也就是「壓入——push」)這個區域之中。有一個地址指針總指向最後一個壓入堆棧的數據所在的數據單元,存放這個地址指針的寄存器就叫做堆棧指示器。開始放入數據的單元叫做「棧底」。數據一個一個地存入,這個過程叫做「壓棧」。在壓棧的過程中,每有一個數據壓入堆棧,就放在和前一個單元相連的後面一個單元中,堆棧指示器中的地址自動加1。讀取這些數據時,按照堆棧指示器中的地址讀取數據,堆棧指示器中的地址數自動減 1。這個過程叫做「彈出pop」。如此就實現了後進先出的原則。
最基本的操作方式 就是 入棧和出棧
⑶ 常說的棧,方法區,堆什麼的都什麼意思
堆棧是一種執行「後進先出」演算法的數據結構。設想有一個直徑不大、一端開口一端封閉的竹筒。有若干個寫有編號的小球,小球的直徑比竹筒的直徑略小。現在把不同編號的小球放到竹筒裡面,可以發現一種規律:先放進去的小球只能後拿出來,反之,後放進去的小球能夠先拿出來。所以「先進後出」就是這種結構的特點。堆棧就是這樣一種數據結構。它是在內存中開辟一個存儲區域,數據一個一個順序地存入(也就是「壓入——push」)這個區域之中。有一個地址指針總指向最後一個壓入堆棧的數據所在的數據單元,存放這個地址指針的寄存器就叫做堆棧指示器。開始放入數據的單元叫做「棧底」。數據一個一個地存入,這個過程叫做「壓棧」。在壓棧的過程中,每有一個數據壓入堆棧,就放在和前一個單元相連的後面一個單元中,堆棧指示器中的地址自動加1。讀取這些數據時,按照堆棧指示器中的地址讀取數據,堆棧指示器中的地址數自動減 1。這個過程叫做「彈出pop」。如此就實現了後進先出的原則。堆棧是計算機中最常用的一種數據結構,比如函數的調用在計算機中是用堆棧實現的。堆棧可以用數組存儲,也可以用以後會介紹的鏈表存儲。下面是一個堆棧的結構體定義,包括一個棧頂指針,一個數據項數組。棧頂指針最開始指向-1,然後存入數據時,棧頂指針加1,取出數據後,棧頂指針減1。#define MAX_SIZE 100typedef int DATA_TYPE;struct stack{DATA_TYPE data[MAX_SIZE];int top;}
⑷ 棧的操作
struct stack
{
int no;
int top;
int bottom;
int *v;
}S1,S2;
int n;
#define N 20
int v[N];
inistack(int v[]){
s1.no=1;
s1.top =s1.bottom =0;
s1.no=2;
s1.top =s1.bottom =n-1;
s1.v=s2.v=v;
}
void push(int v[], int i, int x){
if(i==1){
v[s1.top++]=x;
}
else{
v[s2.top--]=x;
}
}
///////////////////////////////////////////////////////
// 帶返回值彈出
int pop(int v[], int i)
{
int cur= 0;
if(i==1){
cur=v[s1.top--];
}
else{
cur=v[s2.top++];
}
return cur;
}
//不帶返回值彈出 void pop(int v[],int i)
{
if(i==1){
s1.top--;
}else if(i==2)
{
s2.top++;
}
}
⑸ c++棧的使用方法是什麼
棧和隊列是很有聯系的,numbers.top()中的numbers是一個自定義的棧的名稱,top就是抽取第一個元素。下面我舉個例子,頭文件就不寫了,我直接寫代碼:
stack<int>number;定義一個棧,名稱是number,而且是該棧是存放整型數值。
.......
number.push(10);
number.push(20);
number.push(30);//將10,20,30分別壓進棧里
.......
cout<<number.pop()<<endl;//輸出棧頂元素10
number.pop();//刪除棧頂元素10,棧頂元素變為20
cout<<number.pop()<<endl;//輸出棧頂元素20
輸出結果:
10
20
應該沒有問題了吧,棧其實不難,隊列的使用也很相似。