棧的演算法實現及應用

2021-09-22 13:53:31 字數 2594 閱讀 5687

1.棧的順序儲存結構

/*(1)編寫程式,用不同的儲存方法,實現棧的基本操作。

(2) 判斷乙個表示式中的括號(僅有一種括號,小、中或大括號)是否配對。編寫並實現它的演算法。

(3) * 若表示式中既有小括號,又有大括號(或中括號),且允許互相巢狀,但不能交叉,寫出判斷這樣的表示式是否合法的演算法。如 2+3*(4-*3) 為合法;2+3*(4- 、2+3*(4-[5+2 * 3)為不合法。*/

#include using namespace std;

templateclass seqstack

}~seqstack()

bool getresult();

bool getresult2();

public:

void push(const type item); //push data

type pop(); //pop data

type gettop() const; //get data

void print(); //print the stack

void makeempty()

//判斷是否為空

bool isempty() const

//判斷是否滿棧

bool isfull() const

private:

int top;

type *data;

int maxsize;

};templatevoid seqstack::push(const type item)

data[++top] = item;

}templatetype seqstack::pop()

return data[top--];

}templatetype seqstack::gettop() const

return data[top];

}templatevoid seqstack::print()

cout << "--->棧頂" << endl << endl << endl;

}/**

* 判斷乙個表示式中的括號(僅有一種括號,小、中或大括號)是否配對。編寫並實現它的演算法

* @tparam type

* @return

*/templatebool seqstack::getresult() else if (data[i] == ')')

}return left == right;

}templatebool seqstack::getresult2() else if (data[i] == ')' || data[i] == ']' || data[i] == '}')

}return left == right;

}int main() ;

for (int i = 0; i < 10; i++)

stack.print();

stack.push(88);

cout << stack.pop() << endl;

stack.print();

stack.makeempty();

stack.print();

stack.pop();

//判斷表示式的括號是否匹配 只含一種括號

seqstackmystack(20);

string str = "(2*(2+3))";

for (int i = 0; i < str.length(); ++i)

cout << "+++++++++++" << endl;

cout << mystack.getresult();

//判斷表示式的括號是否匹配 含有多種括號

string str2 = "2+3*(4-*3)";

string str3 = "2+3*(4-";

seqstackmystack2(str3.length());

for (int i = 0; i < str3.length(); ++i)

cout << "+++++++++++" << endl;

cout << mystack2.getresult2();

return 0;

}

2.棧的鏈結儲存結構

//棧的鏈結儲存結構及實現

#includeusing namespace std;

templatestruct node

;templateclass linkstack

;templatelinkstack::linkstack()

templatevoid linkstack::push(datatype x)

templatedatatype linkstack::pop()

template datatype linkstack::gettop()

templateint linkstack::empty()

int main()

while(l1.empty()!=1)

cout

}

棧的實現及應用

1.棧定義 棧又稱堆疊,是一種運算受限的線性表,限制是僅僅允許在表的另外一端進行插入和刪除運算。2.特點 後進先出 cpu快取利用率相對較高 不允許隨意訪問 3.實現方式 棧有兩種實現方式,一種是順序儲存,和陣列類似。一種是鏈式儲存,和單鏈表類似。這是在2013編譯器下 棧裡面有以下幾種函式 voi...

Python實現棧,及棧的應用例項

棧 stack 是限定在表尾進行插入或刪除操作的線性表。因此,對於棧來說,表尾端有其特殊含義,稱為棧頂 top 表頭被稱為棧底 bottom 構造空棧 def init self,size self.size size self.stack 輸出棧 def str self return str s...

棧的定義及基本演算法實現

棧定義 是一種只能在一端進行插入或刪除操作的線性表 1 允許 進行插入 刪除操作的一端稱為 棧 頂 2 表的另一端稱為 棧底 3 當棧中沒有資料元素時 稱為 空棧 4 棧的插入操作通常稱為 進棧 或 入 棧 5 棧的刪除操作通常稱為 退棧 或 出棧 例如 死胡同就是乙個棧 洗1疊碗時的取放 棧據有先...