0 votos
por (60 puntos) en C/C++
<a href="http://dobleenlazada" title="ay"></a>

1 Respuesta

0 votos
por (60 puntos)
/*************************************************************
* DEMO_LL.C
*
* Este programa ilustra el comportamiento de una lista ligada
* de enteros.
*************************************************************/
#include <alloc.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <mem.h>
#include "lista.h"

void despliegaPantallaInicial(void);
void borraLista(void);
void despliegaNodo(NODO *pNodo);
int igual(void *pInfo, void *pLlave);
int mayor(void *pInfo, void *pLlave);
LISTA lista = NULL;

int main(void)
{
NODO *pNodo, *pPos, *pAnt;
int dato;
char  operador,sdato[6];
clrscr();
inicializarLista(&amp;lista);
despliegaPantallaInicial();
operador=5;
while(operador!='8')
{
gotoxy(28,10); printf(" ");
gotoxy(51,10); printf(" ");
gotoxy(28,10);
//if((operador = getch()) == ESC) break;
//if(operador!=ESC)
//{
gotoxy(26,10);
operador = getchar();
     switch(operador)
    {
      case '1':
        printf("Insertar");
        gotoxy(36,10);
        //getchar(sdato);
        scanf("%d",&amp;dato);
        pNodo = creaNodo(&amp;dato, sizeof(int));
        if(listaVacia(lista)) pAnt = NULL;
        else pPos = buscaLista(lista, &amp;pAnt, &amp;dato, mayor);
        insertarLista(&amp;lista, pAnt, pNodo);
         break;
      case '2':
        printf("Extraer. ");
        if(listaVacia(lista))
         {
            printf("Lista Vacia. Presiona una tecla para continuar");
            getch();
           }


        else
          {
           gotoxy(36,10);
           scanf("%d",&amp;dato);
           //gets(sdato);
           //dato = atoi(sdato);
           if(!(pPos = buscaLista(lista, &amp;pAnt, &amp;dato, igual)))
           {
            printf("Valor inexistente. Presiona una tecla para continuar");
            getch();
           }
           else
           {
            clrscr();
            despliegaPantallaInicial();
            extraerLista(&amp;lista, pAnt, &amp;dato, sizeof(int));
           }
            break;
          }


           }
      clrscr();
     despliegaPantallaInicial();
     visitarLista(lista, despliegaNodo);
     putchar('\n');
}

inicializarLista(&amp;lista);
//visitarLista(lista, despliegaNodo);
putchar('\n');
return 0;
}
/*************************************************************
* void despliegaPantallaInicial(void)
*
* Esta función despliega la explicación de lo que hace el
* programa y las instrucciones de su uso.
*************************************************************/
void despliegaPantallaInicial(void)
{
  clrscr();
  gotoxy(5,3);
  printf("Este programa demuestra el comportamiento de una");
  printf(" lista ligada. En esta");
  gotoxy(5,4);
  printf("lista se almacenan enteros los cuales son");
  printf(" acomodados en orden ascendente.");
  gotoxy(5,5);
  printf("Hay dos operaciones: Para insertar un numero a ");
  printf("la lista presiona la tecla");
  gotoxy(5,6);
  printf("[1], luego el numero a insertar. Para ");
  printf("extraer un numero de la lista");
  gotoxy(5,7);
  printf("presiona la tecla [2], luego el numero a extraer.");
  printf(" Para terminar presiona");
  gotoxy(5,8);
  printf("la tecla [8].");
  gotoxy(15,10);
  printf("Operacion [ ] Valor [ ]");
}


/*************************************************************
* void despliegaNodo(NODO *pNodo)
*
* Esta función despliega para un nodo, su campo de información
* y su campo siguiente.
*************************************************************/
void despliegaNodo(NODO *pNodo)
{
  static x = 10, y = 13;
  /* Si es el primer nodo de la lista */
  if(pNodo == lista)
  {
    x = 10; y = 13;
  }
  /* Si se va a saltar de renglón */
  if(x == 74)
  {
   x = 10; y += 3;
  }
  /* Despliega el contenido del nodo en un recuadro */
  gotoxy(x,y); putch(0x10);
  gotoxy(x+1,y-1); printf("+-------------+");
  gotoxy(x+1,y); printf("%6d%6p", *(int *)(pNodo->pInfo),pNodo->pSig);
  gotoxy(x+1,y+1); printf("+-------------+");
  x += 16;
  /* Si va a desplegar otra pantalla */
  if(pNodo->pSig &amp;&amp; y == 22 &amp;&amp; x == 74)
  {
   printf("ENTER PARA CONTINUAR");
   x = 10; y = 13;
  borraLista();
  }
}


/*************************************************************
* void borraLista(void)
*
* Borra de la pantalla la lista.
*************************************************************/
void borraLista(void)
{
  int i;
  for(i = 12; i < 25; i++)
  {
   gotoxy(1,i); clreol();
  }
}

/*************************************************************
* int igual(void *pInfo, void *pLlave)
*
* Esta función regresa 0 si info y llave son iguales, diferente
* de cero en caso contrario.
*************************************************************/
int igual(void *pInfo, void *pLlave)
  {
     return *(int *)pInfo - *(int *)pLlave;
  }
/*************************************************************
* int mayor(void *pInfo, void *pLlave)
*
* Esta función regresa 0 si info > llave, diferente de cero
* en caso contrario.
*************************************************************/
int mayor(void *pInfo, void *pLlave)
  {
   return *(int *)pInfo <= *(int *)pLlave;
  }
/*************************************************************
* LISTA.C
*
* Este módulo implementa las operaciones de una lista ligada
* generalizada, est
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código

Categorías

...