Untitled
unknown
plain_text
2 years ago
2.5 kB
4
Indexable
#include "slist.h" #include <stdlib.h> SList slist_crear() { return NULL; } void slist_destruir(SList lista) { SNodo *nodoAEliminar; while (lista != NULL) { nodoAEliminar = lista; lista = lista->sig; free(nodoAEliminar); } } int slist_vacia(SList lista) { return lista == NULL; } SList slist_agregar_final(SList lista, int dato) { SNodo *nuevoNodo = malloc(sizeof(SNodo)); nuevoNodo->dato = dato; nuevoNodo->sig = NULL; if (lista == NULL) return nuevoNodo; SList nodo = lista; for (;nodo->sig != NULL;nodo = nodo->sig); /* ahora 'nodo' apunta al ultimo elemento en la lista */ nodo->sig = nuevoNodo; return lista; } SList slist_agregar_inicio(SList lista, int dato) { SNodo *nuevoNodo = malloc(sizeof(SNodo)); nuevoNodo->dato = dato; nuevoNodo->sig = lista; return nuevoNodo; } void slist_recorrer(SList lista, FuncionVisitante visit) { for (SNodo *nodo = lista; nodo != NULL; nodo = nodo->sig) visit(nodo->dato); } size_t slist_longitud(SList lista){ if (lista==NULL){ return 0; } int longitud = 0; for(; lista->sig != NULL; lista = lista->sig, longitud++); return longitud; } SList* slist_concatenar(SList* lista1, SList* lista2){ SNodo **nodoAux; //SList *nodoAux; if(lista1==NULL){ lista1 = lista2; } else { if (lista2 != NULL){ nodoAux = lista1; for(;(*nodoAux)->sig != NULL; (*nodoAux)=(*nodoAux)->sig); nodoAux->sig = lista2; } } return lista1; } void slist_insertar(SList* lista, int dato, int pos){ int longitudLista = slist_longitud(&lista); if (pos>longitudLista){ return; } SNodo **nodoAux; int posActual = 0; int nuevaLongitud = longitudLista + 1; lista = realloc(lista,sizeof(SNodo) * nuevaLongitud); nodoAux = lista; for(; posActual <= pos; nodoAux=(*nodoAux)->sig); int datoAux = (*nodoAux)->dato; (*nodoAux)->dato = dato; for(nodoAux=(*nodoAux)->sig; (*nodoAux)->sig->sig!= NULL; nodoAux=(*nodoAux)->sig){ (*nodoAux)->sig=nodoAux; } } void slist_eliminar(SList lista, int pos); int slist_contiene(SList lista, int elemento); int slist_indice(SList listsa, int elemento); SList slist_intersecar(SList lista1,SList lista2); SList slist_intersecar_custom(SList lista1, SList lista2, FuncionComparacion fComparacion); void slist_ordenar(SList lista, FuncionComparacion fComparacion); SList slist_reverso(SList lista); SList slist_intercalar(SList lista1, SList lista2); SList slist_partir(SList lista);
Editor is loading...