[C con Clase] AYUDA EN IMPLEMTANCION DE CODIGO
CESAR ANDRES ROMERO
anromartinez en hotmail.com
Jue Nov 27 15:48:50 CET 2008
1) Insertar los elementos en orden creciente.
2) Busca un valor dado en la lista.
3) Eliminar un dato en la posición determinada
4) Imprimir la lista.
EL CODIGO QUE TENGO INSERTA LOS ELEMENTOS DE FORMA MANUAL Y NO SE COMO HACERLE PARA QUE LOS INSERTE AUTOMATICAMENTE DE FORMA CRECIENTE Y QUE LOS BUSQUE:::
AQUI ESTA EL CODIGO:
#include <stdio.h>
#include <stdlib.h>
typedef struct nod{
int value;
struct nod* next;
}node, *pNode, *List;
void add(List*, int, int);
void dropList(List *);
void removeElement(List*, int);
void show(List);
void mainMenu(List);
int main(int argc, char *argv[]){
List list = NULL;
mainMenu(list);
return 0;
}
void add(List *list, int v, int position){
printf("Agregando el elemento %d\n", v);
pNode toAdd;
pNode last = *list;
int i;
/* Crear un nodo nuevo */
toAdd = (pNode)malloc(sizeof(node));
toAdd -> value = v;
/* Si la lista está vacía */
if (!last || position <= 0){
if (!last){
printf("%d es el primer elemento en la lista\n", v);
}else{
printf("Se agrego el elemento en la posicion inicial\n");
}
toAdd->next = *list;
*list = toAdd;
return;
}
/* Se encuentra la posición en la que se agregará, si es mayor a
la última posición, entonces se pondrá en la última posición */
for (i = 2; i<position; i++){
if (!last->next){
i++;
break;
}
last = last->next;
}
/* Añadimos la lista a continuación del nuevo nodo */
toAdd->next = last->next;
last->next = toAdd;
printf("Se agrego el elemento %d en la posicion %d\n", v, i);
}
void dropList(List *list){
printf("Borrando elementos de la lista\n");
int n=0;
pNode node;
while (*list) {
node = *list;
*list = node->next;
free(node);
n++;
}
printf("Se han eliminado %d elementos de la lista\n", n);
}
void removeElement(List *list, int v){
pNode last=NULL;
pNode node=*list;
int n=0;
while (node && node->value != v) {
last = node;
node = node->next;
n++;
}
if (!node || node->value != v){
printf("No se ha encontrado el elemento\n");
return;
}
else { /* Borrar el nodo */
if (!last){ /* Primer elemento */
*list = node->next;
}
else { /* un elemento cualquiera */
last->next = node->next;
}
printf("Eliminando el elemento en la posicion %d\n", n);
free(node);
}
}
void show(List listHead){
if (!listHead){
printf("la lista esta vacia\n");
}
else{
printf("%d ", *listHead);
while (listHead->next){
listHead=listHead->next;
printf("%d ", *listHead);
}
printf("\n");
}
}
void mainMenu(List list){
int opc;
int val;
int pos;
system("cls");
printf("Escoja la opcion\n 1. Imprimir lista\n 2. Agregar elemento\n 3. Borrar elemento\n 4. Salir\n");
fflush(stdin);
scanf("%d", &opc);
system("cls");
switch (opc){
case 1:
show(list);
break;
case 2:
printf("Ingrese el valor (entero) de la lista\n");
fflush(stdin);
scanf("%u", &val);
printf("Ingrese la posicion en la que se agregara el elemento (si es mayor al tamano, este se agregara al final de la lsita)\n");
fflush(stdin);
scanf("%u", &pos);
add(&list, val, pos);
break;
case 3:
printf("Ingrese el valor (entero) de la lista a eliminar\n");
fflush(stdin);
scanf("%u", &val);
removeElement(&list, val);
break;
case 4:
dropList(&list);
system("PAUSE");
return;
}
system("PAUSE");
mainMenu(list);
}
Más información sobre la lista de distribución Cconclase