diff options
| author | Charles <sircharlesaze@gmail.com> | 2019-12-07 17:27:41 +0100 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2019-12-07 17:27:41 +0100 |
| commit | e0dd50831fd19e1145897de8af909002c2821376 (patch) | |
| tree | d3d4dd827b4d55f243b3664ac878e944146f720b /queue.adb | |
| parent | acfbdcefdbc60e97a9e3447afed204b3e40d991e (diff) | |
| download | snake-e0dd50831fd19e1145897de8af909002c2821376.tar.gz snake-e0dd50831fd19e1145897de8af909002c2821376.tar.bz2 snake-e0dd50831fd19e1145897de8af909002c2821376.zip | |
Basic Queue package
Diffstat (limited to 'queue.adb')
| -rw-r--r-- | queue.adb | 50 |
1 files changed, 50 insertions, 0 deletions
@@ -0,0 +1,50 @@ +package body Queue is + + procedure Enqueue(queue: in out T_Queue; data: T_Data) is + element: T_List_Node; + new_back: T_List; + begin + element.data := data; + element.next := null; + new_back := new T_List_Node'(element); + + if Empty(queue) then + queue.front := new_back; + queue.back := new_back; + return; + end if; + + queue.back.next := new_back; + queue.back := new_back; + end Enqueue; + + procedure Dequeue(queue: in out T_Queue) is + begin + if Empty(queue) then + return; + end if; + if queue.front.next = null then + queue.front := null; + queue.back := null; + return; + end if; + queue.front := queue.front.next; + end Dequeue; + + function Length(queue: T_Queue) return Natural is + tmp: T_List := queue.front; + i: Natural := 0; + begin + while tmp /= null loop + tmp := tmp.next; + i := i + 1; + end loop; + return i; + end Length; + + function Empty(queue: T_Queue) return Boolean is + begin + return queue.front = null and queue.back = null; + end Empty; + +end Queue; |
