Index


Creating a LIFO stack using a linked list

A last in first off stack can be implemented using a linked list.  One possible application for this type of stack would be an 'undo' function in a program.  Items are pushed onto the stack from the bottom, and therefore, the last item pushed is always the first item on the linked list.  Normally when users press 'undo' the change that is undone is always the last item changed which would be the item at the very bottom of the LIFO stack.

You can download the source as a text file by clicking here -> LIFO_stack_push_pop.txt

For this example we will create a stack containing only a simple integer in a record.  The linked list consists of a record containing the integer and the pointer to the next item in the linked list.  

        | integer | pointer |

The type declaration would be something like what follows.

type    

   link=^node;  {last on first off undo linked list stack}

   node=record i:integer; nextlink:link end;

In the variable declaration section we will declare a pointer 'head' which will point to the first item on the stack.  A temp pointer will be used to create any new items to be inserted on the stack.

var

 head, temp:link;

The head should be initialized to point to 'nothing' (nil).  If you are using a form then setting the head to nil in the FormCreate procedure would be a good idea.

head:=nil;

To insert an item onto the LIFO stack we simply push it onto the bottom of the stack.  In the first instance we have the head pointer pointing to nil.

| head | ­> nil

To insert an item we first call New to create a new record.  Temp is now pointing at this new record containing a field for an integer (field name i) and a pointer to the next record on the linked list.

New(temp);   temp ­> | i | nextlink |

We insert an integer (in this example) into the 'i' portion of the record.  We will assume that the integer was passed to the function in the variable 'c'.

temp^.i:=c;

What this syntax means is in the 'i' field of the record that temp is pointing to insert the value of the variable c.

Next we set the 'nextlink' pointer of the temp record we just created to be equal to the nextlink pointer of the head of the linked list.  In the case of the first variable inserted into the LIFO stack head is pointing to nil so setting the nextlink pointer of the temp record sets it equal to nil.

temp^.nextlink:=head;

Finally to complete the structure we now point head at the record we just created by making head equal to the value in the pointer temp.

head:=temp;

So the list now has the following form.  Let us suppose the value in 'c' was 12.

head ­> | 12 | nextlink | ­> nil

If we repeat the process and this time push the value '56' onto the LIFO stack the process would look like this...

When we first create the new temp record the '56' is hanging in space.

head ­> | 12 | nextlink | ­> nil

       | 56 | nextlink |

We then set the 'nextlink field' of the record holding the 56 to point to the record holding the 12 by setting the nextlink of the 56 record equal to pointer in the head.  Now both the head and the 56 record are pointing at the 12 record.


             head ­>  

                         12 | nextlink | ­> nil

| 56 | nextlink | ­>


Now that we safely have the 56 record pointing to the 12 record we can attach the 56 record to the head.  To complete the push onto the stack we now set head to point to the 56 record, and this record has now become the 'last in' record pushed onto the bottom of the LIFO stack.


head ­>   | 56 | nextlink | ­>  | 12 | nextlink | ­> nil

You will notice how the end of the list always terminates with nil if we remember to initialize the head pointer to nil before using the stack.  

The code that implements the push is simple and follows below.  The variable 'c' is the item we will be pushing onto the stack.

procedure TForm1.LIFOPush(c:integer);  { new(undohead);  undohead^.unextlink:=nil; }

begin

new(temp);

temp^.i:=c;

temp^.nextlink:=head;

head:=temp;

end;

Note that if you have more than one LIFO stack then you can include a second variable in the procedure call including the value of the head pointer for the stack you want to reference.

procedure TForm1.LIFOPush(c:integer; head:link);

To 'pop' an item off the bottom of the stack we will use a function that returns the value of the integer that was 'popped' as its result.  '56' is the item at the bottom of the stack in this example so we will pop '56' off the stack.  To 'pop' an item we first set result equal to the value of the integer field of the record that the head is pointing to, and then we set temp equal to the value of head (so that temp is pointing to the 56 record.  We then set head equal to the nextlink field of the 56 record that head is pointing to, and then we dispose of the 56 record using the temp pointer.

result:=head^.i;  {head is pointing to the record containing 56 so the function result:=56}

We then set both head and temp to point to the 56 record.

temp:=head;

head ­>

          | 56 | nextlink| ­> | 12 | nextlink | ­> nil

temp ­>

Next we set head equal to the nextlink field of the 56 record.

head:=head^.nextlink { set head equal to the value of the nextlink field pointed to by head}

Head is now pointing to 12 and temp is now pointing to the 56 record.

head ­> | 12 | nextlink | ­> nil

temp ­> | 56 | nextlink |

We have extracted the value 56 as the result of the function, and we have head pointing to '12' and temp pointing to 56 so the item has been 'popped' off the stack and it is now safe to dispose of the 56 record pointed to by temp.

Dispose(temp);

The function to pop an item off the LIFO stack would then take the following form.  You can call the function with the head pointer to the LIFO stack.  In this example the function will return the value of the integer popped off the stack.

function LIFOPop(head:link):integer;

result:=head^.i;

temp:=head;

head:=head^.nextlink;

Dispose(temp);

end;


Related pages:

Inserting, sorting, and disposing of elements on linked list

Disposing of a linked list (recursive) ... using an iterative procedure might be a better idea for really large lists.

Using an array to index and quickly search large linked lists - using the divide and conquer strategy that people use when looking up things in phone books. Even very large lists can be quickly searched using this type of strategy.


Index       Home




A Unified Field Theory

failed_gravity_theory.gif - 10361 Bytes



The Unified Field Theory
is also available as a zip file ->
unified.zip

Introduction :The Pioneer Effect and the New Physics. A brief description of the new physics required to explain the 'Pioneer Effect', which is the constant deceleration of space craft as they fly through space.




Principles of Evolution: A Study in the Evolution of Bedbugs



A couple of years ago my bedroom was invaded by bedbugs. There were two variant genetic lines. One type of bedbug was an enlongated, thin, tubular insect, and the second genetic line was a flat, perfectly circular insect. The result of the cross breeding of these two genetically distinct variants was the production of a bedbug with charcteristics of both, an enlongated, flat bedbug with a central bulge (such that the shape of the bedbug was somewhere between 'long' and 'circular'). The long skinny bedbugs were such strange and unfamiliar looking insects that at first I did not recognize them as being bedbugs, and considered them to be a seperate species of insect. However, as the photographs of bedbugs above indicate, enlongated and skinny bedbugs are not uncommon, and the photographs also show the variants that are produced by genetic combinations that result in an insect somewhere in between 'circular' and 'enlongated'.

Therefore it is my hypothesis that evolution occurs by means of the transfer of dominate genes, with the production of such dominant genes being the product of 'biological algorithms', a genetic software program that brings physical characteristics into harmony with behavior, such that when behavior changes, and a conflict then exists, this acts as a trigger and causes the release of dominant genes. The result is rapid evolution of species. The bedbug is a relatively new insect, not the product of millions of years of evolution but rather an insect that is evolving in real time. The newly emerging dominant form of the insect is the flat, round ciruclar insect, well adapted to living in human bedrooms (it is flat, rather than tubular, thus allowing it to hide in the smallest cracks, living a stealthy lifestyle, and it is round, which gives the insect a maximum storage capacity such that it must endanger itself only a few times a month by emerging to feed.

Other examples of rapid evolution include the development of long legs in an invasive species of toad in Australia. As the toads move into the mountainous regions of Australia, and their behvaior changes, making them 'climbing toads', over the course of just a couple of decades the toads in the highlands have grown long legs specially adapted to climbing. It is worth noting here that the toads are poisonous, and are a successful invasive species because they have no natural predators in Australia, and so it would not be the case that the toads with long legs were 'the fittest survivors', because all the toads are survivors, and therefore predation does not explain the rapid emergence and spread of such well adapted, long legged toads. Once again we see evidence for the existence of biological algorithms and the rapid spread of dominant genes through a population, which once introduced proceed to overwhelm the older genes which are being replaced (making toad long legged and a bed bug round and flat).


A Theological Experiment

My interest in pursuing the Unified Field Theory is spurred on by my need to discover the theoretical explanation of a new form of propulsion (as explained on this page: Why the Unified Field Theory?). The experiment involving the bedbugs came out of nowhere.

I also believe that it is possible to justify theological propositions using experimental methods. If a thing is an objective truth then it can be verified and proven true by means of experimentation. Such a theological proposition is of more value than a ‘divine revelation’, since such revelations depend upon nothing more than establishing authority figures which requires the creation of artificial hierarchies, for the only reason why I might be encouraged to believe an authority figure who orders me to believe unsubstantiated opinions is if I could somehow be convinced that this authority possessed a mind that was somehow superior to mine, and thus was fit to express opinions as though opinions were unquestionable facts and thus worthy of being elevated to the status of absolute dogma.

There is a self evident human inequality which is visibly apparent. Some people are ‘beautiful’ and thus are the true elite on this planet, and some people are not. It is this sexual inequality and the degeneration that follows upon beauty that is the true driving force behind all the evil that happens on earth. The need for ruthless oppression and the pursuit of wealth and the consequent creation of suffering and poverty which must follow upon this practice is for the purpose of creating an artificial alpha elite.

The true elites are the young and the beautiful. The artificial elite are the rich and the wealthy. The elite aging rich artificial alpha male has no good looks, for he is physically degenerate, but he will be found escorting beauty because he has a beautiful wallet. If he loses his wallet he will be found at home with all the other unattractive aged beta males sitting in a rocking chair watching reruns of Bonanza. No money, no sex. It is for this reason that the alpha males are found to be so ruthless and so violent in pursuit of their goal. The alpha male has fallen. The beta male has arisen and now the whole planet is full of ruinous destruction for it.

We see in religion a confused and contradictory reaction to this reality. On the one hand religion preaches a sexless heaven where castration and the clitorectomy create ‘pure spirits’. Muslims throw women under sacks. On the other hand religion supports hierarchy and is the prop of the elite alpha male. It is for this reason that religion is incoherent when it comes to speaking about sex.

Now we see this same principle at work in all of nature. Guppies dance and show off their colorful tails and the guppy who dances with the most colorful tail is the sexually successful guppy. Therefore it is the doctrine of the ruthless oppressor which teaches that the solution to human sexual violence is to be found in castration and the creation of pure ghosts. This would be equivalent to damning an aardvark for having the ‘sinful aardvark nature’ or prosecuting an anteater for the high crime of ‘ant genocide’.

Therefore it was my theological hypothesis that the correct solution to this problem is to give every guppy a beautiful colorful tail. I compare this solution to the classic religious solution which is to cut off every tail since having a tail is ‘sinful’. If having a tail is sinful then God must be sinful for no human being has any choice in deciding whether or not they would be born with a colorful tail, or whether they would not.

When I was young I was a beautiful guppy with a lovely tail. So everyone seemed to think. I am older now. My nose became very badly sunburned and destroyed. It seemed good to me to test my hypothesis by using these ‘biological algorithms’ to correct this problem. I healed half my nose as you can see by the line separating the still very dark patch on the side in the photograph below.





I documented my experiment on these pages. one two t hree four fi ve six


I have confirmed to my own satisfaction that my theological proposition is correct and that religious dogma is erroneous, being based as it was upon nothing more than ‘divine revelation’ which is just a form of opinionated speculation. For the time being I am not continuing this experiment, for I must wait until the weather on this planet improves, and the dark clouds of ruthless oppression break letting a little sun shine come through so that I can show the world the truth about God, by showing people how God goes about giving an old guppy back his beautiful colorful tail.


Until then I will have to sit on the sidelines, while all my scientific breakthroughs are deliberately ignored, while I wonder to myself what ever in the world could be wrong with the human race, because what this all will prove at the end of it all is that there definitely was something wrong with the people on this planet.