Initial data commit
This commit is contained in:
parent
72d218235f
commit
f23f22d71c
199087 changed files with 3378941 additions and 0 deletions
|
|
@ -0,0 +1,58 @@
|
|||
// Using the same type defs from the one way list example.
|
||||
|
||||
Type
|
||||
|
||||
// The pointer to the list structure
|
||||
pOneWayList = ^OneWayList;
|
||||
|
||||
// The list structure
|
||||
OneWayList = record
|
||||
pData : pointer ;
|
||||
Next : pOneWayList ;
|
||||
end;
|
||||
|
||||
// I will illustrate a simple function that will return a pointer to the
|
||||
// new node or it will return NIL. In this example I will always insert
|
||||
// right, to keep the code clear. Since I am using a function all operations
|
||||
// for the new node will be conducted on the functions result. This seems
|
||||
// somewhat counter intuitive, but it is the simplest way to accomplish this.
|
||||
|
||||
Function InsertNode(VAR CurrentNode:pOneWayList): pOneWayList
|
||||
begin
|
||||
|
||||
// I try not to introduce different parts of the language, and keep each
|
||||
// example to just the code required. in this case it is important to use
|
||||
// a try/except block. In any OS that is multi-threaded and has many apps
|
||||
// running at the same time, you cannot rely on a call to check memory available
|
||||
// and then attempting to allocate. In the time between the two, another
|
||||
// program may have grabbed the memory you were trying to get.
|
||||
|
||||
Try
|
||||
// Try to allocate enough memory for a variable the size of OneWayList
|
||||
GetMem(Result,SizeOf(OneWayList));
|
||||
Except
|
||||
On EOutOfMemoryError do
|
||||
begin
|
||||
Result := NIL
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
|
||||
// Initialize the variable.
|
||||
Result.Next := NIL ;
|
||||
Reuslt.pdata := NIL ;
|
||||
|
||||
// Ok now we will insert to the right.
|
||||
|
||||
// Is the Next pointer of CurrentNode Nil? If it is we are just tacking
|
||||
// on to the end of the list.
|
||||
|
||||
if CurrentNode.Next = NIL then
|
||||
CurrentNode.Next := Result
|
||||
else
|
||||
// We are inserting into the middle of this list
|
||||
Begin
|
||||
Result.Next := CurrentNode.Next ;
|
||||
CurrentNode.Next := result ;
|
||||
end;
|
||||
end;
|
||||
Loading…
Add table
Add a link
Reference in a new issue