Untitled

 avatar
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...