In most of the older Programming language that I had used before or played before requires the developer to enter a value for the number of items that you are going to store in a Array. This can be quite a nuisance sometimes, but luckily there is something known as a Link List in the programming world. :D With the help of a Link List, it had definitely solved a lot of length issues in various Programming Language.
This is a simple example that I had created for Flex but the classes were also usable in Flash Professional Projects.This is the source file for the main Application - LinkList.mxml
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" width="100%" height="100%" creationComplete="creationCompleteHandler(event)"> <mx:Style> VBox{ paddingTop:5; paddingBottom:5; paddingLeft:5; paddingRight:5; } </mx:Style> <mx:Script> <![CDATA[ import List.*; import mx.events.FlexEvent; private var tempObject:Object = {x:100,y:100}; private var dataArray:Array = new Array("Data",12345,3.14,tempObject); private var tempList:CustomLinkList = new CustomLinkList(); protected function creationCompleteHandler(event:FlexEvent):void { var strOutput:String = ""; //Adding values to the List for(var i:int = 0; i < dataArray.length; i ++) { tempList.addValue(dataArray[i]); } strOutput = "Show Contents of List"; strOutput += "\nList has " + tempList.length() + " items."; strOutput += "\n"; //Display the objects in the List for(i = 0; i < tempList.length(); i ++) { strOutput += String(tempList.getValueAt(i)) + " "; } strOutput += "\nRemove Item number 3"; //Method to remove an object of a particular position strOutput += "\n" + String(tempList.removeValueAt(2)) + " have been removed."; strOutput += "\nShow Contents of List Again"; strOutput += "\nList has " + tempList.length() + " items."; strOutput += "\n"; //Display the objects in the List for(i = 0; i < tempList.length(); i ++) { strOutput += String(tempList.getValueAt(i)) + " "; } strOutput += "\nRemove All Items"; while(tempList.length() != 0) { strOutput += "\n" + String(tempList.removeValueAt(0)) + " have been removed."; } strOutput += "\nShow Contents of List Again"; strOutput += "\nList has " + tempList.length() + " items."; strOutput += "\n"; for(i = 0; i < tempList.length(); i ++) { strOutput += String(tempList.getValueAt(i)) + " "; } txtMessage.text = strOutput; } ]]> </mx:Script> <mx:VBox width="100%" height="100%"> <mx:TextArea id="txtMessage" width="100%" height="100%"/> </mx:VBox> </mx:Application>
This is a basic Link List class that I had written
package List{ public class CustomLinkList { private var _head:Node; private var _count:int; public function CustomLinkList() { // constructor code head = null; count = 0; } //count = number of items Getters and Setters protected function get count():int { return _count; } protected function set count(value:int):void { _count = value; } //Start of the Node protected function get head():Node { return _head; } protected function set head(value:Node):void { _head = value; } //Creating and adding a new Node //And connect the 2 way Link List properly public function addValue(tempValue:*):void{ var newNode:Node = new Node(tempValue); var currNode:Node = head; if(currNode == null){ head = newNode; }else{ while(currNode.next != null){ currNode = currNode.next; } currNode.next = newNode; newNode.prev = currNode; } count ++; } //Removing a node and returning //the value of the Node at the same time //And connect the 2 way Link List properly public function removeValueAt(tempInt:int):* { var i:int = 0; var currNode:Node = head; if(tempInt < count) { var nextNode:Node; var prevNode:Node; while(i != tempInt){ currNode = currNode.next; i ++; } if(currNode) { nextNode = currNode.next; prevNode = currNode.prev; if(nextNode) nextNode.prev = prevNode; if(prevNode) prevNode.next = nextNode; if(currNode == head) { head = nextNode; } } if(count > 0) count --; return currNode.value; }else{ return null; } } //Get the value of a Node of a particular position public function getValueAt(tempInt:int):*{ var i:int = 0; var currNode:Node = head; if(tempInt < count) { while(i != tempInt){ currNode = currNode.next; i ++; } return currNode.value; }else{ return null; } } //Returns the length of the LinkList public function length():int{ return count; } } }This is a simple Node class
package List{ public class Node { protected var _value:* = null; protected var _next:Node; protected var _prev:Node; public function Node(tempValue:*) { // constructor code _value = tempValue; _next = null; _prev = null; } //Previous Node Getters and Setters public function get prev():Node { return _prev; } public function set prev(value:Node):void { _prev = value; } //Next Node Getters and Setters public function get next():Node { return _next; } public function set next(value:Node):void { _next = value; } //Previous Content of the Node public function set value(tempValue:*):void{ _value = tempValue; } public function get value():*{ return _value; } } }* Click here to view the demo in this post. ^ Click here for the source files of the demo
No comments:
Post a Comment