All pastes #447612 Raw Edit

lists

public c v1 · immutable
·published 2007-04-19 05:09 UTC
rendered paste body
#include <stdio.h>#include <stdlib.h>struct list {	char *data;	struct list *next;};typedef struct list list;list *new_list(char *data) {	list *ret = malloc(sizeof(list));	ret->data = data;	ret->next = NULL;	return ret;}/** Returns the last element in the list. */list *list_last(list *l) {	list *ret = l;	while (ret->next != NULL) {		ret = ret->next;	}	return ret;}/* function pointers!!!!!!! */void list_foreach(list *l, int (*func)(list*)) {	list *current = l;	while (current != NULL) {		(*func)(current);		current = current->next;	}}int list_size(list *l) {	int size = 1;	list *current = l;	while (current->next != NULL) {		size++;		current = current->next;	}	return size;}void list_add(list *l, char *data) {	list *last = list_last(l);	last->next = new_list(data);}list *list_seek(list *l, int pos) {	list *ret = l;	int i;	for (i = 0; i < pos - 1; i++) {		ret = ret->next;	}	return ret;}char *list_get(list *l, int pos) {	return list_seek(l, pos)->data;}void list_insert_after(list *l, int pos, char *data) {	list *cur = list_seek(l, pos);	list *n = new_list(data);	n->next = cur->next;	cur->next = n;}int list_find(list *l, char *find) {	list *current = l;	int pos = 1;	while (current != NULL) {		if (strcmp(current->data, find) == 0) {			return pos;		}		current = current->next;		pos++;	}	return -1;}void list_set(list *l, int pos, char *to) {	list_seek(l, pos)->data = to;}void list_print(list *l) {	printf("=== List ===\n");	int i = 1;	list *cur = l;	while (cur != NULL) {		printf("#%i: %s\n", i++, cur->data);		cur = cur->next;	}	printf("Total size: %i \n", list_size(l));}void list_free(list *l) {	int i = list_size(l) - 1;	while (i > 0) {		list *cur = list_seek(l, i);		free(cur->next);		cur->next = NULL;		i--;	}	free(l);}void printlol(list *l) {	printf("AAA: %s\n", l->data);}int main() {	list *test = new_list("Hey!! (THIS WILL BE changed!!)");	list_add(test, "LOL");	list_add(test, "LOOKAT ME!22");	list_add(test, ";D");	list_print(test);	list_set(test, 1, "First element!!!!");	list_insert_after(test, 1, "second element!!");	printf("%s \n ALSO ;D is at %i \n", list_get(test, 3), list_find(test, ";D"));	list_foreach(test, &printlol);	list_free(test);	return 0;}