棧:先進後出實現方式有兩種,一種使用陣列,一種是鏈式結構
使用陣列的缺點就是在定義棧的時候就需要以某值初始化陣列,確定陣列的大小,也就是確定了棧的深度
/**
* 棧:底層用陣列實現
*/public
class
arrstack
//陣列滿的時候棧滿
public
boolean
isfull()
//棧空時top為-1
public
boolean
isempty()
public
void
push(object o)
elem[++top] = o;
}public object pop()
return elem[top--];
}public object peek()
return elem[top];
}}
/**
* 棧:底層利用鍊錶實現
* 入棧時我們從表頭新增節點(新增節點需要知道節點的前驅),我們不知道表尾節點的前驅節點
*/class node
public
node(object data)
public
node()
}public
class
linkstack
public
void
push(object o)
//出棧要判斷棧是否為空
public object pop()
node temp = top;
top = top.next;
temp.next = null;
size--;
return temp.data;
}public object peek()
return
this.top.data;
}public
void
display()
system.out.println();
}}
利用棧實現表示式的計算
表示式都是中綴表示法
1.首先利用棧將表示式轉換為字尾法表示
輸入中綴表示式,得到字尾表示式2.利用棧計算字尾表示式的值思路:
(1)初始化乙個運算子棧
(2)從算術表示式輸入的字串中,從左到右的讀取乙個字元
(3)若當前的 字元是運算元,則直接送往字尾表示式
(4)若當前的字元是左括號,則將其壓入運算子棧
(5)若當前的字元是操作符,則進行如下 操作:
①當運算子棧為空時,直接將其壓入棧。
②當此運算子的優先順序高於棧頂的運算子時,則將此運算子壓入棧,否則,彈出棧頂運算子送往字尾式,並將當前運算子壓棧,重複步驟(5)
(6)若當前字元是右括號,反覆將棧頂符號彈出,並送往字尾表示式中,知道棧頂元素為左括號為止,然後將左括號出棧並丟棄
(7)若讀取還未結束,則重複步驟(2)
(8)若讀取結束,則將棧中剩餘的所有的運算子彈出並送往字尾表示式
思路:(1)如果遇到數字則將其壓棧
(2)如果是運算子則彈出棧中的兩個數字進行計算,同時將計算得到的結果壓棧。重複步驟(2)
public
class
/** * 如果是計算符,則返回true
*/private
boolean
isoperator(char c)
return
false;
}/**
* 如果是右括號,返回true
*/private
boolean
isopenright(char c)
/*** 如果是左括號,返回true
*/private
boolean
isopenleft(char c)
/*** 返回運算子的優先順序,括號的優先順序最低
*/private
intpriority(char c)
return
0; }
/***@param express 輸入的中綴表示式
*@return 字尾表示式
*/public string cover2postsuffix(string express)else
if(this.isopenright(c))
}else
if(isoperator(c))
if(o != null) // 將最後一次取出的優先順序低的運算子入棧
ls.push(o);
}ls.push(c);
}else}}
while(!ls.isempty())
return postfix;
}/**
* 根據傳入的字尾表示式,計算其值
*/public
double
numbercalculate(string postfix)
//計算結果壓棧
ls.push(d3);
}else}}
return (double)ls.pop();
}public
static
void
main(string args)
}
棧 Stack 的理解及其應用
棧的抽象資料型別 棧的抽象資料型別由以下結構和操作定義 棧被構造為項的有序集合,其中項被新增和從末端移除的位置稱為 頂部 棧是有序的 lifo 棧操作如下 簡單來說,類似於放一摞書,最先放的書在最下面,因此最後放的書最先取出來,而最後取出放的第一本書,棧就是這樣一種資料結構。我們可以用python的...
棧(stack)的應用
棧 stack 通常也被稱之為 堆疊 它的本質是線性表。堆 heap 通常我們也稱它為優先佇列,本質是樹。此處講述一些stack的應用。編譯器在檢查 這樣成對出現的符號所造成的語法錯誤時,通常並不需要去設計乙個很複雜的程式去判斷。而是使用乙個簡單的演算法,這個演算法用到乙個棧。演算法描述如下 做乙個...
棧(Stack)的Python實現
棧就是只能在一端插入和刪除資料的鍊錶,這個端就叫做棧頂 top 最後乙個新增的資料第乙個被刪除。因此,這也叫後進先出 last in first out 鍊錶或是先進後出鍊錶 first in last out 舉個例子,餐廳的盤子堆,盤子洗完要堆到上面,而不是插到下面的某個位置 相信不會有人那麼做...