棧的兩種實現方式

2021-10-01 16:25:10 字數 2395 閱讀 3879

一、陣列實現棧

首先需要定義乙個陣列來儲存棧中的資料,並定義乙個變數來記錄陣列中儲存元素的個數,編寫乙個構造方法來構造乙個長度為十得陣列。

//先頂i有乙個陣列來儲存棧中的元素

private object array;

//定義陣列中儲存元素的個數

private int size;

//構造後乙個長度與為10的陣列

public

mystack()

判斷棧是否為空

只需要判斷記錄陣列儲存元素數量的變數是否為零即可。

//判斷棧是否為空

public boolean isemple()

擴充陣列

判斷陣列是否已經滿了,如果滿了則需要擴充陣列,定義乙個值為10的長度變數,呼叫arrays中的copyof(array, newsize)方法來擴充陣列

//判斷陣列是否已經滿了,如果滿了則擴充陣列

public

void

addarray

(int size)

}

向棧中新增元素

先呼叫addarray方法檢視當前元素是否能新增進去,如果陣列已滿則擴充陣列長度。最後直接將需要新增的元素賦給陣列的第size++個元素。

//向棧中新增元素

public

void

put(

e e)

5.檢視棧頂元素

先判斷棧是否為空,如果為空直接返回false,反之直接返回陣列的最後乙個元素。

//檢視棧頂元素

public

epeek()

return(e

) array[size-1]

;}

取出棧頂元素

直接呼叫peek方法,該方法會返回棧頂元素,直接將它賦給乙個新的變數,然後將陣列的最後乙個元素也就是棧頂元素賦值為空,然後返回這個變數。

//取出棧頂元素

public

epop()

測試:

public

static

void

main

(string[

] args)

執行截圖:

二、鍊錶實現棧

public

class

node

<

e>

}

實現類:先定義乙個棧頂節點,判斷棧知否為空,直接返回棧頂節點是否為空。

//定義乙個棧頂節點

node<

e> top =

null

;//判斷棧是否為空

public boolean isemple()

;

向棧中新增元素

先建立乙個新節點,並判斷棧是否為空,如果為空的話,直接將新節點賦給棧頂節點,反之將棧頂節點賦給它的後繼節點,再將新節點賦給棧頂節點,並返回棧頂結點。

//向棧中新增節點

public

eput

(e e)

newnode.next = top;

//將棧頂節點節點賦給新節點的下乙個節點

top = newnode;

//將新節點賦給棧頂結點節點

return(e

) top;

}

檢視棧頂元素:

先判斷棧是否為空,如果為空返回空,反之返回棧頂節點值。

//檢視棧頂元素

public

epeek()

return top.data;

}

取出棧頂元素:

直接呼叫peek方法,該方法會返回棧頂節點的值,將其賦給乙個新變數,然後將棧頂節點的後繼節點賦給它本身,最後返回這個新變數。

//取出棧頂元素

public

epop()

測試:

public

static

void

main

(string[

] args)

執行截圖:

棧的兩種實現方式 python實現

棧是一種後進先出 lifo 的資料結構,在設計演算法時有十分廣泛的應用。對棧的操作是通過將元素壓入棧 放在棧頂 或是將棧頂元素彈出,都是對棧頂元素的操作。若要實現乙個高效的棧,則要考慮到這兩種操作的時間複雜度。有兩種資料結構可以作為實現棧的基礎 順序表和煉表。在順序表尾端插入或刪除元素的時間複雜度與...

棧的兩種實現

順序表實現棧 include include 順序表實現棧 define test head printf n s n function define default sz 5 typedef char datatype typedef struct seqstack seqstack 棧的初始化 ...

棧的兩種實現

棧的基本實現 include stdafx.h include include define maxsize 64 using namespace std 基於陣列實現的棧 class stack 預設建構函式 int push int data 元素入棧 int pop 元素出棧 bool ise...