diff options
Diffstat (limited to 'reference/C/MISC/linklists.html')
-rw-r--r-- | reference/C/MISC/linklists.html | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/reference/C/MISC/linklists.html b/reference/C/MISC/linklists.html new file mode 100644 index 0000000..f17b58d --- /dev/null +++ b/reference/C/MISC/linklists.html @@ -0,0 +1,119 @@ +<title>Link Lists</title> +<body bgcolor="#ffffcc"> +<hr> +<center> <h1>Link Lists</h1> </center> +<hr> +<p> +<ul> +<li><a href="#long">Long explanation</a> +<li><a href="#short">Short explanation</a> +</ul> + +<a name=long> +Question, how would you write a program to meet the following requirements? + +<ol> +<li>Read an unknown number of records from a file into memory. A typical +record would look like: +<pre> + Ref Title Cost + --- ----- ---- + 1234 Oracle_Guide 22.95 +</pre> +<li>Perform a numeric sort based on the first field. +<li>Delete duplicate records based on the first field. +</ol> + +One method is to define an +<a href="../CONCEPT/arrays.html#chard">array</a> of records as below: + +<pre> + main() + { + char array[50][80]; /* 50 records, 80 bytes long */ + } +</pre> + +The data can then be read into the array and then actions performed +on the data. +This is OK but has some major problems. +<ol> +<li>The arrary will hold all the data in character format. It would be +nice to hold the integer and decimal numbers in a more appropriate form. +<li>If you have more than 50 records the program has to be altered +and recompiled. +</ol> +The first problem could be fixed by defining an +<a href="../SYNTAX/struct.html#array">array of structures</a> BUT both problems +can be solved with linked lists.<p> + +<a name=short> + +<img src=../../GRAPHICS/linklist.gif align=right> +<p> +The concept of a linked list is fairly simple. It is a group of structures +linked together by pointers, here is a picture:<p> +<br clear=right> +<p> +<p> +The "Name Age Pointer" block could be defined as below: +<pre> + struct record {char name[20]; int age; struct record *next_rec;}; +</pre> + +The important bit is "struct record *next_rec" this is the pointer to the next +structure (record). It will either point to the next record which +will require memory reserved +with the <a href="../FUNCTIONS/malloc.html">malloc</a> function or +<a href="../SYNTAX/null.html">NULL</a> if its the last record. +<p> + +<h2>Examples</h2> + +<img src=../../GRAPHICS/computer.gif align=left> +<a href="../EXAMPLES/linklst1.c"> Here is the first example.</a> +This program is more complicated than I would +like, but its the simplest I can come up with. +<br clear=left> +<p> +<img src=../../GRAPHICS/computer.gif align=center> +<a href="../EXAMPLES/linklst2.c"> +This is the same program</a> but without the heavy commenting. +<br clear=left> +<p> +<img src=../../GRAPHICS/computer.gif align=center> +<a href="../EXAMPLES/linklst3.c"> +This is still the same program</a> but it is slightly simplified with the use +of <a href="../SYNTAX/typedef.html">typedef</a>. +<br clear=left> + +<hr> +<p> +<center> +<table border=2 width=80% bgcolor=ivory> +<tr align=center> +<td width=25%> +<a href="../cref.html" target="_top">Top</a> +</td><td width=25%> +<a href="../master_index.html" target="_top">Master Index</a> +</td><td width=25%> +<a href="../SYNTAX/keywords.html" target="_top">C Keywords</a> +</td><td width=25%> +<a href="../FUNCTIONS/funcref.htm" target="_top">Functions</a> +</td> +</tr> +</table> +</center> +<p> + + + +<hr> +<address>Martin Leslie +<script language="JavaScript"> +<!-- // +document.write(document.lastModified); +// --> +</script> +</address> + |