Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package {
- /**
- * simple circular stack for storing arrays
- * @author voidSkipper
- */
- public class Stack{
- private var head:StackElement;
- public var length:uint;
- public function Stack(elements:Array=null) {
- this.head = new StackElement();
- head.next = head;
- head.prev = head;
- head.data = ["This linked list is empty."];
- length = 0;
- if (elements == null) {
- elements = [];
- }
- while (elements.length != 0) {
- pushfront(elements.pop());
- }
- }
- //slowest function in this datatype.
- //o(1), O(n). errynyan else is constant.
- public function dataAt(at:uint):Array {
- if (at >= length) {
- return ["request out of range"];
- }
- var c:StackElement = head.next;
- while (at != 0) {
- c = c.next;
- at--;
- }
- return c.data;
- }
- public function pushback(data:Array):void {
- var oldlast:StackElement = head.prev;
- var newlast:StackElement = new StackElement(data, oldlast, head);
- oldlast.next = newlast;
- head.prev = newlast;
- length++;
- }
- public function pushfront(data:Array):void {
- var oldfirst:StackElement = head.next;
- var newfirst:StackElement = new StackElement(data, head, oldfirst);
- oldfirst.prev = newfirst;
- head.next = newfirst;
- length++;
- }
- public function popback():Array {
- if (length == 0) {
- return head.data;
- }
- var victim:StackElement = head.prev;
- victim.prev.next = head;
- head.prev = victim.prev;
- victim.prev = victim.next = null;
- length--;
- return victim.data;
- }
- public function popfront():Array {
- if (length == 0) {
- return head.data;
- }
- var victim:StackElement = head.next;
- victim.next.prev = head;
- head.next = victim.next;
- victim.prev = victim.next = null;
- length--;
- return victim.data;
- }
- public function toString():String {
- var o:String = "";
- var c:StackElement = head;
- var i:uint = 0;
- while (i < length) {
- c = c.next;
- o = o + "[" + i + "]" + c.data + "\n";
- i++
- }
- return o;
- }
- }
- }
Add Comment
Please, Sign In to add comment