/*
* Copyright 2011 Steven Gribble
*
* This file is the solution to an exercise problem posed during
* one of the UW CSE 333 lectures (333exercises).
*
* 333exercises is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* 333exercises is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with 333exercises. If not, see .
*/
#include
#include
#include
#include "ll.h"
// Lecture 5, exercise 1
// Extend the linked list program we covered in class:
// - add a function that returns the number of elements in a list
// - bonus: design and implement a “Pop” function that
// removes an element from the head of the list
// - bonus: make sure your linked list code, and customers’
// code that uses it, contains no memory leaks
int main(int argc, char **argv) {
Node *list = NULL, *tmp;
char *hi = "hello";
char *bye = "goodbye";
char *dynamic_string = NULL, *ret = NULL;
// Push two elements on the list. Note that
// the memory that the variables 'hi' and 'bye'
// point to is allocated and initialized to contain
// the strings "hello" and "goodbye" when the program
// is loaded; we don't have to worry about free()'ing
// that memory as a result.
list = Push(list, (void *) hi);
list = Push(list, (void *) bye);
// Dynamically allocate some memory for a third
// element -- the string "yo!". We need four
// bytes to store this string (remember there is a
// NULL character '\0' at the end of a string).
dynamic_string = (char *) malloc(4*sizeof(char));
assert(dynamic_string != NULL);
dynamic_string[0] = 'y';
dynamic_string[1] = 'o';
dynamic_string[2] = '!';
dynamic_string[3] = '\0';
list = Push(list, (void *) dynamic_string);
// Iterate through the list.
tmp = list;
while (tmp != NULL) {
printf("Payload: '%s'\n", (char *) (tmp->element));
tmp = tmp->next;
}
// Pop the first element off the list. This
// should be our dynamically allocated string.
ret = Pop(list, &list);
assert(ret == dynamic_string);
// free the memory that we previously malloc'ed
// to hold the "yo!" string.
free(ret);
// pop the other two elements off the list.
ret = Pop(list, &list);
assert(ret == bye);
ret = Pop(list, &list);
assert(ret == hi);
return 0;
}