棧是一種特殊的線性表(被限制的線性表),只允許在表的一端進行刪除和插入運算。能夠進行運算的一端稱為棧頂,另一端稱為棧底。每次刪除元素稱為彈棧pop,每次插入元素稱為壓棧push。棧按照儲存結構又分為順序棧和鏈式棧。
棧是一種特殊的線性表,線性表按照儲存結構分為順序儲存和鏈式儲存。同樣,棧根據儲存結構分為順序棧和鏈式棧。
其中順序棧是用陣列來實現的。將陣列下標為0作為棧底,下標為n作為棧頂。
順序棧的初始化
public
class
astack
//有參構造
public
astack
(int size)
//初始化棧
public
void
setup
(int size)
}
注意:初始化棧頂指標可以為0,也可以為-1,為0的話,top指標是指向即將插入的元素的位置,在進行push的時候先加元素,然後指標再加1;為-1的話,top指標指向的是棧頂的元素,在push的時候,指標要先加1,然後才能插入元素。pop操作也會造成不同。所有要注意初始化的差異。
順序棧的操作
判斷是否是空棧
public
boolean
isempty()
判斷是否棧滿public
boolean
isfull()
壓棧pubic void
pushstack
(object it)
}
彈棧public object popstack()
}
取棧頂元素public object topvalue()
}
清空棧public
void
clear()
鏈式棧的底層是鍊錶
鍊錶節點
public
class
node
public
node
(int data)
public
node
(int data,node next)
}
鏈式棧的初始化public
class
linkstack
public
linkstack()
}
鏈式棧的操作
判斷是否為空
public
boolean
isempty()
壓棧public
void
push
(int data)
棧頂元素public
inttopvalue()
}
彈棧public
intpop()
}
清空棧public
void
clear()
隊的操作是在兩端,其中一端只能進行插入,該端稱為佇列的隊尾,而另外一端只能進行刪除,該端稱為佇列的隊首。遵循先進先出原則。
佇列根據儲存方式又分為順序佇列和鏈式佇列
順序佇列的初始化
因為佇列的兩頭都可以進行操作,因此需要兩個指標,front表示對頭,rear表示隊尾。為了避免假溢位浪費空間,採用迴圈佇列。
public
class
aqueue
public
aqueue
(int size)
public
void
setup
(int size)
}
由於是迴圈佇列,需要把指標的值限制在佇列的長度範圍內,利用取餘的方法:rear=(rear+1)%陣列長度
順序佇列的操作
判斷佇列是否滿了
public
boolean
isfull()
入隊public
void
enqueue
(int value)
}
判斷是否為空public
void
isempty()
出隊public
intoutqueue()
}
鏈式佇列的初始化public
class
linkqueue
public
void
setup()
}
鏈式佇列的操作
判斷是否為空
public
boolean
isempty()
出隊public
intdequeue()
}
入隊public
void
enqueue
(node node)
注:僅用於學習交流 資料結構 棧和佇列
棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 define maxsize 1024 struct stack 操作函式 push 入棧 pop 出棧 struct lstack 鏈棧示意圖 操作函式 push 入棧 pop 出棧 注意 也可以直接呼叫系統已經寫好的庫...
資料結構 棧和佇列
本章的基本內容是 兩種特殊的線性表 棧和佇列 從資料結構角度看,棧和佇列是操作受限的線性表,他們的邏輯結構相同。從抽象資料型別角度看,棧和佇列是兩種重要的抽象資料型別。p棧 限定僅在表的一端進行插入和刪除操作的線性表。p允許插入和刪除的一端稱為棧頂,另一端稱為棧底。p空棧 不含任何資料元素的棧。a ...
資料結構 棧和佇列
用兩個棧來實現乙個佇列,完成佇列的push和pop操作。佇列中的元素為int型別。class solution int pop node stack2.top stack2.pop return node private stack stack1 stack stack2 大家都知道斐波那契數列,現...