資料結構複習 棧和佇列 1 棧

2022-07-15 01:24:07 字數 2998 閱讀 1352

1.棧和佇列簡介:

棧和佇列是非常重要的兩種資料結構,在軟體設計中應用很多。棧和佇列也是線性結構,線性表,棧和佇列這三種資料元素和資料元素間的邏輯完全相同。差別是線性表的操作不受限制,而棧和佇列的操作收到限制,棧的操作只能在表的一端進行,佇列的插入操作在表的一端進行而其它操作在表的另一端進行,所以把棧和佇列稱為操作受限的線性表

棧:棧(stack)是操作限定在表的尾端進行的線性表。表尾由於要進行插入,刪除等操作,所以,它具有特殊含義,把表尾成為棧頂(top),另一端是固定的,叫棧底(bottom)。當棧中沒有資料元素時叫空棧(empty stack)。

棧通常記為s=(a1,a2,......an),a1為棧底元素,an為棧訂元素,這n個資料元素按照a1,a2,......an的順序依次入棧,而出棧的順序相反,an第乙個出棧,a1最後乙個出棧。所以,棧的操作是按照後進先出(last in first out)或先進後出(first in last out)。棧操作示意圖:

c#2.0中提供了泛型的stack類,用來進行棧的操作。

常用方法:

1.push()  入棧,新增資料

2.pop()  出棧,刪除資料並返回被刪除的資料

3.peek()取得棧訂的資料,不刪除

4.clear()清空所有的資料

4.count 取得棧中資料的個數

2.順序棧:

用一片連續的儲存空間來儲存棧中的資料元素,這樣的棧成為順序棧,類似於順序表,用以為陣列來存放棧中的資料元素。棧頂指示器top設在陣列下標為0的一端,top隨插入和刪除而變化,當棧頂為空時,top=-1 示意圖:

c#實現順序棧:

public

class seqstack: istackds

//////

預設建構函式

/// public seqstack() : this(10

)

//////

獲取元素數量

/// public

int count }

//////

清空

/// public

void

clear()

//////

獲取長度

/// ///

public

intgetlength()

//////

是否為空

/// ///

public

bool

isempty()

//////

獲取棧頂元素

/// ///

public

t peek()

//////

出棧

/// ///

public

t pop()

//////

入棧

/// ///

public

void

push(t item)

}

view code

3.鏈棧:

棧的另外一種儲存方式是鏈式儲存,這樣的棧成為鏈棧(linked stack)。鏈棧通常用單鏈表來表示,它的實現是單鏈表的簡化。所以鏈棧的結點結構與單鏈表一樣。由於鏈棧的操作只在一端進行,為了操作方便,把棧頂設在鍊錶的頭部,並且不需要頭結點。

c#實現鏈棧:

class linkstack: istackds }

//////

清空棧中資料

/// public

void

clear()

//////

取得棧中元素個數

/// ///

public

int getlength() =>count;

//////

是否為空

/// ///

public

bool isempty() => count == 0

;

//////

取得棧頂元素資料 不刪除棧頂

/// ///

public

t peek()

//////

出棧

/// ///

public

t pop()

//////

入棧

/// ///

public

void

push(t item)

}

view code

結點類:

public

class node

public

node(t data)

public node(t _data,node_next)

public node(node_next)

#endregion

public t data

public nodenext

}

view code

複習 資料結構 棧和佇列

鏈佇列 include include define elemtype char define maxsize 100 typedef struct node 定義節點型別 snode typedef struct lqueue void initqueue lqueue qu void enque...

資料結構複習 棧和佇列

棧是一種只能在一端進行插入或刪除操作的線性表 棧的最主要特點是後進先出 lifo n個不同的元素進棧,其出棧次序總數為 catalan number c 2n nn 1 frac n 1c2n n typedef elemtype int typedef struct 共享棧 如果要用到兩個相同型別...

資料結構複習三 棧和佇列

先簡要介紹以下棧與佇列 棧 stack 是一種後進先出 lifo 的線性表,僅在表尾 即棧頂 進行插入或刪除操作,像火車排程的頭進尾出。佇列 queue 與棧相反,是一種先進先出 fifo 的線性表,只允許在一端進行插入,而在另一端進行刪除,允許插入的一端稱為隊尾,允許刪除的一端則稱為隊頭,就像日常...