基本資料結構(3) 棧

2021-06-06 03:41:34 字數 2594 閱讀 5577

棧(stack),在電腦科學中,是一種特殊的序列形式的資料結構,它的特殊之處在於只能允許在鏈結序列或陣列的一端(稱為棧頂,top)進行加入(push)和輸出(pop)的運算。棧可以用一維動態陣列或鍊錶的形式來完成。

由於堆疊資料結構只允許在一端進行操作,因而按照後進先出(lifo, last in first out)的原理運作。堆疊資料結構使用兩種基本操作:推入(push)和彈出(pop):

推入(push):將資料放入堆疊的頂端(陣列形式或序列形式),堆疊頂端top指標加一。

彈出(pop):將頂端資料資料輸出(回傳),堆疊頂端資料減一。

先來看棧的架構設計:

首先來看抽象棧實現方式:

class stack : public virtual container

;

再來看棧的動態陣列實現方式:

class stackasarray : public stack

;stackasarray::stackasarray( unsigned int size )

:array(size)

void stackasarray::purge()

} count = 0;

}stackasarray::~stackasarray()

object& stackasarray::top() const

return *array [count - 1u];

}void stackasarray::push( object& obj )

array [count++] = &obj;

}object& stackasarray::pop()

return *array [--count];

}void stackasarray::accept( visitor& visitor ) const

}iterator& stackasarray::newiterator() const

注意最後乙個函式,返回stackasarray內部類iter,這是乙個迭代器模式的典型應用:

class stackasarray::iter : public iterator

;stackasarray::iter::iter( stackasarray const& _stack )

:stack (_stack)

bool stackasarray::iter::isdone() const

object& stackasarray::iter::operator*() const

else }

void stackasarray::iter::operator++()

}void stackasarray::iter::reset()

接下來看棧的鍊錶實現方式:

class stackaslinkedlist : public stack

;class stackaslinkedlist::iter : public iterator

;stackaslinkedlist::stackaslinkedlist()

:list()

void stackaslinkedlist::purge()

} list.purge ();

count = 0;

}stackaslinkedlist::~stackaslinkedlist()

void stackaslinkedlist::push( object& object )

object& stackaslinkedlist::pop()

object& result = *list.first ();

list.extract (&result);

--count;

return result;

}object& stackaslinkedlist::top() const

return *list.first ();

}void stackaslinkedlist::accept( visitor& visitor ) const

}iterator& stackaslinkedlist::newiterator() const

stackaslinkedlist::iter::iter( stackaslinkedlist const& _stack )

:stack (_stack)

bool stackaslinkedlist::iter::isdone() const

object& stackaslinkedlist::iter::operator*() const

else }

void stackaslinkedlist::iter::operator++()

}void stackaslinkedlist::iter::reset()

{ position = stack.list.head ();

基本資料結構 棧

基本資料結構 棧 一.線性資料結構 我們從四個簡單但重要的概念開始研究資料結構。棧,佇列,deques 雙向佇列 列表是一類資料的容器,它們資料元素之間的順序由新增或刪除的順序決定。一旦乙個資料元素被新增,它相對於前後元素一直保持該位置不變。諸如此類的資料結構被稱為線性資料結構。線性資料結構有兩端,...

基本資料結構 棧

我們從四個簡單但重要的概念開始研究資料結構。棧,佇列,deques 雙向佇列 列表是一類資料的容器,它們資料元素之間的順序由新增或刪除的順序決定。一旦乙個資料元素被新增,它相對於前後元素一直保持該位置不變。諸如此類的資料結構被稱為線性資料結構。線性資料結構有兩端,有時被稱為左右,某些情況被稱為前後。...

基本資料結構 棧

棧的特徵是後進先出 last in,first out,lifo 棧上的插入操作稱為壓入 push 刪除操作稱為彈出 pop 下面使用乙個陣列s n 來實現乙個最多容納n個元素的棧。定義乙個屬性指向最新插入的元素。棧的操作 如下 public class stack public stack int...