From a732e9942d19821765445856a2ce91f3ee6c85ba Mon Sep 17 00:00:00 2001 From: rizal gowandy Date: Mon, 22 Sep 2014 14:14:45 +0700 Subject: [PATCH] SliceDeque with Two Slice --- SliceDeque.go | 176 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 SliceDeque.go diff --git a/SliceDeque.go b/SliceDeque.go new file mode 100644 index 0000000..caf68ca --- /dev/null +++ b/SliceDeque.go @@ -0,0 +1,176 @@ +package main + +import ( + "fmt" + "math/rand" + "time" +) + +type Any interface{} + +type Deque struct { + depan []Any + belakang []Any +} + +// Create a new deque: O(1) +func NewDeque() *Deque { + var q Deque + q.depan = make([]Any,0,0) + q.belakang = make([]Any,0,0) + return &q +} + +// Return size: O(1) +func (q *Deque) Count() int { + return (len(q.depan)+len(q.belakang)) +} + +// Text whether deque is empty: O(1) +func (q *Deque) IsEmpty() bool { + if (len(q.depan)+len(q.belakang)) == 0 { return true } + return false +} + +// Access first element: O(1) +func (q *Deque) Front() Any { + if len(q.depan) == 0 { return nil } + return q.depan[0] +} + +// Access last element: O(1) +func (q *Deque) Back() Any { + if len(q.belakang) == 0 { return nil } + return q.belakang[len(q.belakang)-1] +} + +// Insert new element into the end of deque: O(1) +func (q *Deque) enqueueBack(data Any) { + q.belakang = append(q.belakang,data) +} + +// Insert new element into the head of deque: O(1) +func (q *Deque) enqueueFront(data Any) { + q.depan = append(q.depan,data) +} + +// Remove first element from deque: O(1) +func (q *Deque) dequeueFront() Any { + if len(q.depan) == 0 { + q.depan = q.belakang + data := q.depan[0] + q.depan = q.depan[1:] + for i:=0;i=0; i-- { + fmt.Printf(" %d: %#v |", k, q.depan[i]) + k++ + } + i=len(q.depan)+1 + for j=0; j