Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- typedef struct registro_nodo {
- int valor;
- struct registro_nodo *siguiente;
- } tipoNodo;
- typedef tipoNodo *pNodo;
- typedef tipoNodo *Lista;
- /* Funciones con listas: */
- void Insertar(Lista *l, int v);
- void Borrar(Lista *l, int v);
- int ListaVacia(Lista l);
- void BorrarLista(Lista *l);
- void MostrarLista(Lista l);
- int main() {
- Lista lista = NULL;
- pNodo p;
- Insertar(&lista, 20);
- Insertar(&lista, 10);
- Insertar(&lista, 40);
- Insertar(&lista, 30);
- MostrarLista(lista);
- Borrar(&lista, 10);
- Borrar(&lista, 15);
- Borrar(&lista, 45);
- Borrar(&lista, 30);
- Borrar(&lista, 40);
- MostrarLista(lista);
- BorrarLista(&lista);
- getchar();
- return 0;
- }
- void Insertar(Lista *lista, int v) {
- pNodo nuevo, anterior;
- /* Crear un nodo nuevo */
- nuevo = (pNodo)malloc(sizeof(tipoNodo));
- nuevo->valor = v;
- /* Si la lista está vacía */
- if(ListaVacia(*lista) || (*lista)->valor > v) {
- /* Añadimos la lista a continuación del nuevo nodo */
- nuevo->siguiente = *lista;
- /* Ahora, el comienzo de nuestra lista es en nuevo nodo */
- *lista = nuevo;
- }
- else {
- /* Buscar el nodo de valor menor a v */
- anterior = *lista;
- /* Avanzamos hasta el último elemento o hasta que el siguiente tenga
- un valor mayor que v */
- while(anterior->siguiente && anterior->siguiente->valor <= v)
- anterior = anterior->siguiente;
- /* Insertamos el nuevo nodo después del nodo anterior */
- nuevo->siguiente = anterior->siguiente;
- anterior->siguiente = nuevo;
- }
- }
- void Borrar(Lista *lista, int v) {
- pNodo anterior, nodo;
- nodo = *lista;
- anterior = NULL;
- while(nodo && nodo->valor < v) {
- anterior = nodo;
- nodo = nodo->siguiente;
- }
- if(!nodo || nodo->valor != v){
- printf("El valor %d no existe en la lista",v);
- getchar();
- return;
- }
- else { /* Borrar el nodo */
- if(!anterior) /* Primer elemento */
- *lista = nodo->siguiente;
- else /* un elemento cualquiera */
- anterior->siguiente = nodo->siguiente;
- free(nodo);
- }
- }
- int ListaVacia(Lista lista) {
- return (lista == NULL);
- }
- void BorrarLista(Lista *lista) {
- pNodo nodo;
- while(*lista) {
- nodo = *lista;
- *lista = nodo->siguiente;
- free(nodo);
- }
- }
- void MostrarLista(Lista lista) {
- pNodo nodo = lista;
- if(ListaVacia(lista)) printf("Lista vacía\n");
- else {
- while(nodo) {
- printf("%d -> ", nodo->valor);
- nodo = nodo->siguiente;
- }
- printf("\n");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement