SE250:lab-4:mabd065
Introduction
Task 1
int length( Cons* list ) { int i = 0; for( ; list != nil; list = list->tail ) { i++; } return i; }
A straight forward task.
Task 2
Started with this code:
element_t first( Cons* list ) { int first_element; if (list != nil) { first_element = list->head; return first_element; } else { return 0; } }
This code worked fine. But the replaced it with a simpler one:
element_t first( Cons* list ) { return list->head; }
And then the following tasks for returning a value:
element_t second( Cons* list ) { int i = 0, j = 1; while ( (i < j) && (list != nil) ) { list = list->tail; i++; } return list->head; }
element_t third( Cons* list ) { int i = 0, j = 2; while ( (i < j) && (list != nil) ) { list = list->tail; i++; } return list->head; }
element_t fourth( Cons* list ) { int i = 0, j = 3; while ( (i < j) && (list != nil) ) { list = list->tail; i++; } return list->head; }
element_t nth(int k, Cons* list ) { int i = 0, j = (k); while ( (i < j) && (list != nil) ) { list = list->tail; i++; } return list->head; }
Task 3
The equal function. It took me a while to think about it:
int equal( Cons* list1, Cons* list2 ) { if ( length(list1) == length(list2) ) { while ( list1 != nil ) { if (list1->head == list2->head) { list1 = list1->tail, list2 = list2->tail; } else { return 0; } } return 1; } else { return 0; } }
Task 4
The find one was way simpler than i thought:
Cons* find( element_t value, Cons* list ) { while ( list != nil ) { if (list->head == value) { return list; } list = list->tail; } return list; }
I have tired my own test cases. But when i used the lecturer ones, i found some minor errors and fixed them.