SE250:lab-4:vpup001

From Marks Wiki
Revision as of 05:19, 3 November 2008 by Mark (Sọ̀rọ̀ | contribs) (7 revision(s))
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Link lists

  • The function to return the number of elements in the list.
int length(Cons* list) {
	 int i = 0;

        for ( ; list!=nil; list=list->tail) {
		 i++;
	 }
 	 return i;
}
  • The functions that returns the elements in the named position (i.e first, second, third, fourth) and returns 0 if no such element exists.
element_t first(Cons* list) {
     return list->head;
}
element_t second(Cons* list) {
     return list->tail->head;
}
element_t third(Cons* list) {
	return list->tail->tail->head;
}
element_t fourth(Cons* list) {
	return list->tail->tail->tail->head;
}
  • The function that returns the i'th element in a list or 0 if no such element exists (generalizing the above functions)
element_t nth(int i, Cons* list) {
	while(i!=0) {
 		list = list->tail;
		i--;
	}
 	return list->head;
}

The while loop is used to go through every element in the list. If i is not equal to 0 it checks the next element and it does that until i is 0 and returns list->head.

  • The function that returns true if both lists have exactly the same elements in the same order, false otherwise.
int equal(Cons* list1, Cons* list2) {
       while (list1 != nil && list2 != nil) {
               if (list1->head == list2->head) {
                       list1 = list1->tail;
                       list2 = list2->tail; 
                       return 1;
               } else {
                       return 0;
               }
       } 
}