<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE250%3Alab-4%3Asbas046</id>
	<title>SE250:lab-4:sbas046 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.kram.nz/index.php?action=history&amp;feed=atom&amp;title=SE250%3Alab-4%3Asbas046"/>
	<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-4:sbas046&amp;action=history"/>
	<updated>2026-04-28T17:33:06Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.kram.nz/index.php?title=SE250:lab-4:sbas046&amp;diff=6187&amp;oldid=prev</id>
		<title>Mark: 1 revision(s)</title>
		<link rel="alternate" type="text/html" href="https://wiki.kram.nz/index.php?title=SE250:lab-4:sbas046&amp;diff=6187&amp;oldid=prev"/>
		<updated>2008-11-03T05:19:37Z</updated>

		<summary type="html">&lt;p&gt;1 revision(s)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
  File: LL.c&lt;br /&gt;
  Date: 1 April 2008&lt;br /&gt;
  Author: John Hamer&lt;br /&gt;
  Purpose: Starter code for SOFTENG 250 lab 4, 2008&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;assert.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
typedef int element_t;&lt;br /&gt;
&lt;br /&gt;
typedef&lt;br /&gt;
struct Cons {&lt;br /&gt;
    element_t head;&lt;br /&gt;
    struct Cons* tail;&lt;br /&gt;
} Cons;&lt;br /&gt;
&lt;br /&gt;
static Cons NIL = { 0, &amp;amp;NIL };&lt;br /&gt;
Cons* nil = &amp;amp;NIL;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cons* cons( element_t elt, Cons* tail ) {&lt;br /&gt;
    Cons* cell = malloc( sizeof(Cons) );&lt;br /&gt;
    assert( cell != 0 );&lt;br /&gt;
    cell-&amp;gt;head = elt;&lt;br /&gt;
    cell-&amp;gt;tail = tail;&lt;br /&gt;
    return cell;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void print_list( Cons* list ) {&lt;br /&gt;
    char* sep = &amp;quot;&amp;quot;;&lt;br /&gt;
    printf( &amp;quot;List[&amp;quot; );&lt;br /&gt;
    for( ; list != nil; list = list-&amp;gt;tail ) {&lt;br /&gt;
	printf( &amp;quot;%s%d&amp;quot;, sep, list-&amp;gt;head );&lt;br /&gt;
	sep = &amp;quot;,&amp;quot;;&lt;br /&gt;
    }&lt;br /&gt;
    printf( &amp;quot;]\n&amp;quot; );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int length(Cons* list){&lt;br /&gt;
    int n = 0;&lt;br /&gt;
    for( ; list != nil; list = list-&amp;gt;tail ) {&lt;br /&gt;
	n++;&lt;br /&gt;
    }   &lt;br /&gt;
    return n;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
element_t first(Cons* list){&lt;br /&gt;
    return list-&amp;gt;head;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
element_t second(Cons* list){&lt;br /&gt;
    return list-&amp;gt;tail-&amp;gt;head;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
element_t third(Cons* list){&lt;br /&gt;
    return list-&amp;gt;tail-&amp;gt;tail-&amp;gt;head;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
element_t fourth(Cons* list){&lt;br /&gt;
    return list-&amp;gt;tail-&amp;gt;tail-&amp;gt;tail-&amp;gt;head;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
element_t nth(int i, Cons* list){&lt;br /&gt;
    element_t element;&lt;br /&gt;
    int l;&lt;br /&gt;
    for(l=0; l&amp;lt;i; l++){&lt;br /&gt;
	if (l != 0){	&lt;br /&gt;
	    list = list-&amp;gt;tail;&lt;br /&gt;
	}&lt;br /&gt;
	element = list-&amp;gt;head;&lt;br /&gt;
    }&lt;br /&gt;
    return element;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
int equal(Cons* list, Cons* list2){&lt;br /&gt;
    int length_list = length(list);&lt;br /&gt;
    int length_list2 = length(list2);&lt;br /&gt;
    int l;&lt;br /&gt;
    &lt;br /&gt;
    if (length_list != length_list2){&lt;br /&gt;
	return 0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    for(l=0; l&amp;lt;length_list; l++){&lt;br /&gt;
	if (l != 0){	&lt;br /&gt;
	    list = list-&amp;gt;tail;&lt;br /&gt;
	    list2 = list2-&amp;gt;tail;&lt;br /&gt;
	}&lt;br /&gt;
	if (list-&amp;gt;head != list2-&amp;gt;head){&lt;br /&gt;
	    return 0;&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Cons* find(element_t element, Cons* list){&lt;br /&gt;
    Cons* emptylist;&lt;br /&gt;
    int length_list = length(list);&lt;br /&gt;
    int l;&lt;br /&gt;
    &lt;br /&gt;
    for(l=0; l&amp;lt;length_list; l++){&lt;br /&gt;
	if (l != 0){	&lt;br /&gt;
	    list = list-&amp;gt;tail;&lt;br /&gt;
	}&lt;br /&gt;
	if (list-&amp;gt;head == element){&lt;br /&gt;
	    return list;&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    return emptylist;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Cons* nappend(Cons* list, Cons* list2){&lt;br /&gt;
&lt;br /&gt;
    int length_list = length(list);&lt;br /&gt;
    int l;&lt;br /&gt;
&lt;br /&gt;
    for(l=0; l&amp;lt;length_list; l++){&lt;br /&gt;
	if (l != 0){	&lt;br /&gt;
	    list = list-&amp;gt;tail;&lt;br /&gt;
	}&lt;br /&gt;
	if (list-&amp;gt;tail == nil){&lt;br /&gt;
	    list-&amp;gt;tail = list2;&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Cons* append(Cons* list, Cons* list2){&lt;br /&gt;
&lt;br /&gt;
    Cons* newlist;&lt;br /&gt;
    int l;&lt;br /&gt;
&lt;br /&gt;
    newlist = list;&lt;br /&gt;
    int length_list = length(newlist);&lt;br /&gt;
&lt;br /&gt;
    for(l=0; l&amp;lt;length_list; l++){&lt;br /&gt;
	if (l != 0){	&lt;br /&gt;
	    newlist = newlist-&amp;gt;tail;&lt;br /&gt;
	}&lt;br /&gt;
	if (newlist-&amp;gt;tail == nil){&lt;br /&gt;
	    newlist-&amp;gt;tail = list2;&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    return list;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main( ) {&lt;br /&gt;
    Cons* list  =  cons(1,cons(2,cons(3,nil)));&lt;br /&gt;
    Cons* list2  =  cons(4,cons(5,cons(7,nil)));&lt;br /&gt;
    Cons* list3  =  cons(1, cons(2,cons(3,cons(4,nil))));&lt;br /&gt;
    Cons* search;&lt;br /&gt;
&lt;br /&gt;
    print_list(list ); /* expect: List[1,2,3] */&lt;br /&gt;
    printf(&amp;quot;Length = %d\n&amp;quot;, length( list )); /* should return 3 */&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;,first(list));&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;,second(list));&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, third(list));&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, fourth(list));&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, nth(1, list));&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, nth(2, list));&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, nth(0, list));&lt;br /&gt;
&lt;br /&gt;
    printf(&amp;quot;\nEqual test:\n&amp;quot;);&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, equal(list, list2));&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, equal(list, list3));&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, equal(list, list));&lt;br /&gt;
    printf(&amp;quot;%d\n&amp;quot;, equal(list2, list3));&lt;br /&gt;
    &lt;br /&gt;
    search = find(5, list2);&lt;br /&gt;
    print_list( search );&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void test_LL( ) {&lt;br /&gt;
    print_list( nil );				/* List[] */&lt;br /&gt;
    print_list( cons(10,cons(20,cons(30,nil))) ); /* List[10,20,30] */&lt;br /&gt;
&lt;br /&gt;
    assert( length( nil ) == 0 );&lt;br /&gt;
    assert( length( cons(10,cons(20,cons(30,nil))) ) == 3 );&lt;br /&gt;
&lt;br /&gt;
    assert( first( nil ) == 0 );&lt;br /&gt;
    assert( first( cons(10,cons(20,nil)) ) == 10 );&lt;br /&gt;
&lt;br /&gt;
    assert( second( nil ) == 0 );&lt;br /&gt;
    assert( second( cons(10,cons(20,nil)) ) == 20 );&lt;br /&gt;
&lt;br /&gt;
    assert( third( nil ) == 0 );&lt;br /&gt;
    assert( third( cons(10,cons(20,nil)) ) == 0 );&lt;br /&gt;
    assert( third( cons(10,cons(20,cons(30,nil))) ) == 30 );&lt;br /&gt;
&lt;br /&gt;
    assert( fourth( nil ) == 0 );&lt;br /&gt;
    assert( fourth( cons(10,cons(20,nil)) ) == 0 );&lt;br /&gt;
    assert( fourth( cons(10,cons(20,cons(30,nil))) ) == 0 );&lt;br /&gt;
    assert( fourth( cons(10,cons(20,cons(30,cons(40,nil)))) ) == 40 );&lt;br /&gt;
&lt;br /&gt;
    assert( nth(0,nil) == 0 );&lt;br /&gt;
    assert( nth(1,nil) == 0 );&lt;br /&gt;
    assert( nth(0,cons(10,nil)) == 10 );&lt;br /&gt;
    assert( nth(1,cons(10,nil)) == 0 );&lt;br /&gt;
&lt;br /&gt;
    assert( equal(nil,nil) );&lt;br /&gt;
    assert( ! equal(nil,cons(10,nil)) );&lt;br /&gt;
    assert( ! equal(cons(10,nil),nil) );&lt;br /&gt;
    assert( equal(cons(10,nil),cons(10,nil)) );&lt;br /&gt;
    assert( ! equal(cons(10,nil),cons(20,nil)) );&lt;br /&gt;
&lt;br /&gt;
    print_list( find(10,nil) );		/* List[] */&lt;br /&gt;
    print_list( find(20,cons(10,nil)) );	/* List[] */&lt;br /&gt;
    print_list( find(10,cons(10,nil)) );	/* List[10] */&lt;br /&gt;
&lt;br /&gt;
    print_list( nappend(nil,nil) );	   /* List[] */&lt;br /&gt;
    print_list( nappend(nil,cons(10,nil)) ); /* List[10] */&lt;br /&gt;
    print_list( nappend(cons(10,nil),nil) ); /* List[10] */&lt;br /&gt;
    print_list( nappend(cons(10,nil),cons(20,nil)) ); /* List[10,20] */&lt;br /&gt;
&lt;br /&gt;
    print_list( append(nil,nil) );	  /* List[] */&lt;br /&gt;
    print_list( append(nil,cons(10,nil)) ); /* List[10] */&lt;br /&gt;
    print_list( append(cons(10,nil),nil) ); /* List[10] */&lt;br /&gt;
    print_list( append(cons(10,nil),cons(20,nil)) ); /* List[10,20] */&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/*&lt;br /&gt;
  Local Variables:&lt;br /&gt;
  compile-command: &amp;quot;gcc -Wall LL.c -o LL &amp;amp;&amp;amp; ./LL&amp;quot;&lt;br /&gt;
  End:&lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I hit a dead end at append and copy after about 1 and a half hours :(&lt;/div&gt;</summary>
		<author><name>Mark</name></author>
	</entry>
</feed>