資料結構3 棧

2021-08-15 04:00:08 字數 3533 閱讀 1788

#pragma once

#include

#include

#include

#include

using

namespace

std;

/*棧的典型應用:

1)有明確演算法解決乙個問題,但是問題的解卻以線性序列的形式給出。

2)無論是遞迴還是迭代實現,該線性序列都是以逆序計算輸出的。

3)輸入輸出規模不確定,難以事先確定盛放輸出資料的容器的大小。

*/template

class stack

void clear()

bool empty()const

t& top()const;//取頂:直接返回向量的末元素

void push(t const &e);//入棧:等效於將新元素作為向量的未元素插入

bool pop(t &e);//出棧:等效於刪除向量末元素

bool find(const t& e)const;

template

friend ostream& operator

<<(ostream &os,stack&v);

};template

void stack::copyfrom(t const *a, int lo, int hi)

}template

void stack::expand()

template

void stack::shrink()

template

stack::stack(int s = 0, int v = 0)

template

stack::stack(t const *a, int n)

template

stack::stack(t const *a, rank lo, rank hi)

template

stack::stack(stackconst &v)

template

stack::stack(stackconst &v, rank lo, rank hi)

template

void stack::push(t const &e)

template

bool stack::pop(t &e)

template

t& stack::top()const

template

bool stack::find(const t& e)const

}return

false;

}template

ostream& operator

<<(ostream &os, stack&v)

os << "]";

return os;

}//典型應用

class stackexample

; queen(const queen &q)

bool

operator == (const queen &q)const

bool

operator != (const queen &q)const

friend ostream& operator

<<(ostream &os, queen &v)

};public:

template

static

void convert(stack&s, int n, int base); //1.將十進位制數n轉換為base進製

template

static

bool check(stack&s, string world);//2.分隔符匹配

static

float getexpressionresult(string

exp, string &rpn);//3.對表示式exp求值,並轉換為逆波蘭式rpn

static

void placequeens(int n);//n皇后問題

};template

void stackexample::convert(stack&s, int n, int base)

; if (n > 0)

/*while (n)//非遞迴版

*/}template

bool stackexample::check(stack&s, string world)

': if (s.pop(c) && (c == '

i++;

}return s.empty();

}template

d stackexample::calcu(t op, d d1, d d2)

return r;

}template

//o1:棧頂,o2:當前,返回棧頂 op 當前

t stackexample::comoptr(t st, t cur)

else

if (st == '*' || st == '/')

else

if (st == '(')

else

if (st == ')')

return c;

}template

bool stackexample::readnumber(const

string &exp, int pos, stack&s)

for (int e = pos; e < exp.size(); e++)

}return

false;

}float stackexample::getexpressionresult(string

exp,string &rpn)

else

//若當前字元為運算子

else

}break;

default:exit(-1);}}

dx++;

}if (!opnd.empty() && !optr.empty())

opnd.pop(v);

return v;}/*

很多應用問題的解,在形式上都可看作若干元素按特定次序構成的乙個序列,

構成這個序列的排列組合有很多個,如果用蠻力策略,則必然無法將執行時間控制在多項式的範圍內。

技巧:根據候選解的某些區域性特徵,以候選解子集為單位批量的刪除,搜尋空間一般呈樹狀結構,

而被排除的候選解往往隸屬於同一分支,這個技巧稱為剪枝。與只對應的演算法多呈現如下模式:

從0開始,嘗試逐步增加候選解的長度,這一過程是在成批地考查具有特定字首的所有候選解,

這種從長度上逐步向目標解靠近的嘗試,稱作試探。

8皇后問題的座標系:

---------y丨丨

丨 x*/void stackexample::placequeens(int n)

else

//試探下一列

else

}} while (solu.size()//輸出結果序列

cout

<< solu << endl;

}

資料結構3 棧

2 2 鏈式棧儲存結構與基本運算 3 棧的應用 棧 stack 限定在棧頂 表尾 進行插入 入棧 和刪除 出棧 的線性表。基操作的特性是先進後出,又稱為 後進先出 last in first out,lifo 的線性表。根據棧的設計儲存結構的不同,一般分也順序棧和鏈式棧,對應的基本運算操作也有所不同...

資料結構(3) 棧

0.目錄 1.線性表 陣列 2.線性表 單向鍊錶 3.棧棧是一種比較常見的資料結構,是一種較為特殊的線性表。對於棧來說,插入 刪除 訪問元素只能在棧頂進行。對棧的基本操作有push 進棧 pop 出棧 和peek 查詢棧頂 基於這種特性,棧又叫做lifo last in first out 表,即後...

資料結構3 棧

2 2 鏈式棧儲存結構與基本運算 3棧的應用 棧 stack 限定在棧頂 表尾 進行插入 入棧 和刪除 出棧 的線性表。基操作的特性是先進後出,又稱為後進先出 last in first out,lifo 的線性表。根據棧的設計儲存結構的不同,一般分也順序棧和鏈式棧,對應的基本運算操作也有所不同。棧...