Untitled
unknown
plain_text
3 years ago
2.5 kB
5
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...