|
From: Carlos R. <cr...@us...> - 2001-11-17 01:17:35
|
Update of /cvsroot/aedii2001/aedii2001/src
In directory usw-pr-cvs1:/tmp/cvs-serv30288/src
Modified Files:
Makefile.am Makefile.in
Added Files:
list.c list.h
Log Message:
--- NEW FILE: list.c ---
/*
* Faculdade de Ciências e Tecnologia
* Universidade Nova de Lisboa
*
* Algoritmos e Estruturas de Dados II
* 2001 / 2002
*
* Carlos Rodrigues 9566
* Helder Correia 9937
*/
#include <stdlib.h>
#include "list.h"
void list_append(List *list, void *elem)
{
ListObj *elem_obj;
elem_obj = (ListObj *)malloc(sizeof(ListObj));
elem_obj->prev = NULL;
elem_obj->next = NULL;
elem_obj->elem = elem;
if (!list->head) {
list->head = elem_obj;
list->tail = elem_obj;
} else {
elem_obj->prev = list->tail;
list->tail->next = elem_obj;
list->tail = elem_obj;
}
}
/* Copia uma lista, nao os seus elementos */
void list_copy(List *dest, List *orig)
{
ListObj *curr;
dest->head = NULL;
dest->tail = NULL;
curr = orig->head;
while (curr) {
list_append(dest, curr->elem);
curr = curr->next;
}
}
void list_reverse_copy(List *dest, List *orig)
{
ListObj *curr;
dest->head = NULL;
dest->tail = NULL;
curr = orig->tail;
while (curr) {
list_append(dest, curr->elem);
curr = curr->prev;
}
}
void list_destroy(List *list)
{
ListObj *curr, *curr2;
curr = list->head;
while (curr) {
curr2 = curr->next;
free(curr);
curr = curr2;
}
}
/* Retorna true se o elemento "*elem" for removido com sucesso */
int list_remove_by_ptr(List *list, void *elem)
{
ListObj *tmp, *tmp2;
if (list->head) {
if (elem == list->head->elem) {
tmp = list->head->next;
if (list->head == list->tail)
list->tail = NULL;
free(list->head);
list->head = tmp;
if (list->head)
list->head->prev = NULL;
return 1;
} else if (elem == list->tail->elem) {
tmp = list->tail->prev;
if (list->tail == list->head)
list->head = NULL;
free(list->tail);
list->tail = tmp;
if (list->tail)
list->tail->next = NULL;
return 1;
} else { /* Garantidamente "*elem" nao e cabeca nem cauda da lista */
tmp = list->head->next; /* Nao verifica a cabeca */
while (tmp->next) { /* Nem a cauda */
tmp2 = tmp->next;
if (tmp->elem == elem) {
tmp->next->prev = tmp->prev;
tmp->prev->next = tmp->next;
free(tmp);
return 1;
}
tmp = tmp2;
}
}
}
return 0;
}
/* true se forem diferentes (algum dos objectos nao for o mesmo) */
int list_differs(List *a, List *b)
{
ListObj *curr_a;
ListObj *curr_b;
curr_a = a->head;
curr_b = b->head;
while (curr_a && curr_b) {
if (curr_a->elem != curr_b->elem)
return 1;
curr_a = curr_a->next;
curr_b = curr_b->next;
}
return (curr_a != NULL) || (curr_b != NULL);
}
/* EOF - list.c */
--- NEW FILE: list.h ---
/*
* Faculdade de Ciências e Tecnologia
* Universidade Nova de Lisboa
*
* Algoritmos e Estruturas de Dados II
* 2001 / 2002
*
* Carlos Rodrigues 9566
* Helder Correia 9937
*/
#ifndef _LIST_H
#define _LIST_H
typedef struct _List List;
typedef struct _ListObj ListObj;
struct _List {
ListObj *head;
ListObj *tail;
};
struct _ListObj {
ListObj *prev;
void *elem;
ListObj *next;
};
void list_append(List *list, void *elem);
void list_copy(List *dest, List *orig);
void list_reverse_copy(List *dest, List *orig);
void list_destroy(List *list);
int list_remove_by_ptr(List *list, void *elem);
int list_differs(List *a, List *b);
#endif /* _LIST_H */
Index: Makefile.am
===================================================================
RCS file: /cvsroot/aedii2001/aedii2001/src/Makefile.am,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Makefile.am 2001/11/13 02:32:02 1.3
--- Makefile.am 2001/11/17 01:17:28 1.4
***************
*** 6,8 ****
dates.c dates.h \
main.c \
! str.c str.h
--- 6,9 ----
dates.c dates.h \
main.c \
! str.c str.h \
! list.c list.h
Index: Makefile.in
===================================================================
RCS file: /cvsroot/aedii2001/aedii2001/src/Makefile.in,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** Makefile.in 2001/11/13 02:32:02 1.4
--- Makefile.in 2001/11/17 01:17:28 1.5
***************
*** 68,74 ****
command.c command.h \
console.c console.h \
main.c \
str.c str.h \
! dates.c dates.h
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
--- 68,75 ----
command.c command.h \
console.c console.h \
+ dates.c dates.h \
main.c \
str.c str.h \
! list.c list.h
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
***************
*** 82,86 ****
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
! aedii2001_OBJECTS = command.o console.o main.o str.o dates.o
aedii2001_LDADD = $(LDADD)
aedii2001_DEPENDENCIES =
--- 83,87 ----
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
! aedii2001_OBJECTS = command.o console.o dates.o main.o str.o list.o
aedii2001_LDADD = $(LDADD)
aedii2001_DEPENDENCIES =
***************
*** 97,102 ****
TAR = gtar
GZIP_ENV = --best
! DEP_FILES = .deps/command.P .deps/console.P .deps/dates.P .deps/main.P \
! .deps/str.P
SOURCES = $(aedii2001_SOURCES)
OBJECTS = $(aedii2001_OBJECTS)
--- 98,103 ----
TAR = gtar
GZIP_ENV = --best
! DEP_FILES = .deps/command.P .deps/console.P .deps/dates.P .deps/list.P \
! .deps/main.P .deps/str.P
SOURCES = $(aedii2001_SOURCES)
OBJECTS = $(aedii2001_OBJECTS)
|