Nuevas NORMAS para el foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Julio 26, 2008, 10:17:27
Boton Buscar
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: listas enlazadas en C 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: listas enlazadas en C  (Leído 156 veces)
tloz04
Miembro
*****
Desconectado Desconectado

Mensajes: 29


tloz04@hotmail.com
Ver Perfil WWW Email
« en: Abril 04, 2008, 04:58:24 »

hola compañeros pues mi problema es este sobre unas listas y mi problema es que no se mucho sobre listas(he estado estudiando un poco)pero no tengo mucho tiempo y me gustaria si me pudieran ayudar a hacer este problema(me ayudarian mucho si me dan el codigo)

escribir una programa que tenga una funcion que elimine el nodo que ocupa la posicion"i" siendo el nodo cabecera el que ocupa la posicion 0

tomamos en cuenta que la posicion "i "esta dada por el usuario de una lista de "n" elementos dada por el usuario
.

se que es mucho pero ya no tengo tiempo y aunque he estado estudiando aun no logro sacar el programa
En línea

"todos tenemos alas,solo hay que extenderlas"
[p3ll3]
Colaborador
*****
Desconectado Desconectado

Mensajes: 524

Read The Fucking Manual && STFU xDDD


Ver Perfil WWW
« Respuesta #1 en: Abril 04, 2008, 05:35:13 »

Podrias dejar lo que llevas para ver en que te ayudamos , si te dejamos el code nunca vas a aprender...




Saludos....... Cool
En línea


Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion


Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion

tloz04
Miembro
*****
Desconectado Desconectado

Mensajes: 29


tloz04@hotmail.com
Ver Perfil WWW Email
« Respuesta #2 en: Abril 04, 2008, 06:14:32 »

bueno yo ya habia leido algo y por desgracia tengo muchas dudas pero pienso que son muy simples espero pudan ayudarme he aqui lo que llevo

#include <stdio.h>
#include <alloc.h>
//aqui inicio mi estructura de nombre lista
struct Lista{
void *dato;
struct Lista *liga;
};struct Lista *lista_insertar(struct Lista *lista,void *dato)

ahora mi duda (si paresco un ignorante) es como insertar "n"datos dados por el usuario,se que es por asignacion de memoria dinamica segun entendi es asi:

struct Lista* nodo=(struct Lista*) malloc(sizeof(struct Lista));

despues de las dudas de aqui sigo con la busqueda del elemento "i"

main()
{
printf("dame la posicion a eliminar:");
scanf("%d",&i);

por teoria entiendo que el apuntador *liga apunta al siguiente nodo,segun yo seria hacer un ciclo while desde la pimera posicion hasta llegar a la posicion "i" y ya lugo borrar ese elemento pero no se como hacerlo,se que llevo poco pero solo he tenido 2 dias para estudiar esto e intentar hacer el programa
En línea

"todos tenemos alas,solo hay que extenderlas"
Fashion
Colaborador
*****
Desconectado Desconectado

Mensajes: 915



Ver Perfil Email
« Respuesta #3 en: Abril 12, 2008, 02:29:01 »

bueno yo ya habia leido algo y por desgracia tengo muchas dudas pero pienso que son muy simples espero pudan ayudarme he aqui lo que llevo

#include <stdio.h>
#include <alloc.h>
//aqui inicio mi estructura de nombre lista
struct Lista{
void *dato;
struct Lista *liga;
};struct Lista *lista_insertar(struct Lista *lista,void *dato)

ahora mi duda (si paresco un ignorante) es como insertar "n"datos dados por el usuario,se que es por asignacion de memoria dinamica segun entendi es asi:

struct Lista* nodo=(struct Lista*) malloc(sizeof(struct Lista));

despues de las dudas de aqui sigo con la busqueda del elemento "i"

main()
{
printf("dame la posicion a eliminar:");
scanf("%d",&i);

por teoria entiendo que el apuntador *liga apunta al siguiente nodo,segun yo seria hacer un ciclo while desde la pimera posicion hasta llegar a la posicion "i" y ya lugo borrar ese elemento pero no se como hacerlo,se que llevo poco pero solo he tenido 2 dias para estudiar esto e intentar hacer el programa

//Definicion de librerias
#include <stdlib.h>
#include <iostream.h>

int iValor;//variable global entera "iValor: Dato a ingresar"

//declaracion de tipos
typedef struct Nodo
{
   int valores;
   struct Nodo *siguiente;
}tipoNodo;//tipo para declarar nodos

typedef tipoNodo *lista;//tipo para definir listas. 
                        //*lista: actua como variable de la estructura Nodo
 
//Definiciones de funciones
void insertar (lista *,int);//funcion para ingresar datos
void mostrar (lista *);//funcion para mostrar datos
 
//funcion para insertar un nodo a la lista
void insertar(lista *inicio,int nro)
{
   lista nodo;
   //asignamos un bloque de memoria al nodo
   nodo=(tipoNodo *)malloc(sizeof(tipoNodo));
   nodo->valores=nro;//almacenamos en el campo valores el dato ingresado
   nodo->siguiente=*inicio;//continuamos en el siguiente nodo
   *inicio=nodo;//actualizamos el puntero
}

//funcion para mostrar la lista
void mostrar(lista *inicio)
{
   lista puntero;   // Definimos puntero
   puntero=*inicio;    // Actualizamos puntero con los datos ingresados
   while(puntero!=NULL) //verificamos si ha datos, si lo imprimimos
   {
      cout<<puntero->valores<<" ";   
      puntero=puntero->siguiente;//avanza al siguiente nodo (puntero)
   }
    cout<<endl;   //Avanzar una linea
}

//funcion principal
void main()
{
   lista inicio=NULL;   // Incializamos la variable lista
   cout<<"Ingrese un numero:";      
   cin>>iValor;//valor a insertar
   insertar(&inicio,6);   // valor ingresado por defecto
   insertar(&inicio,5);
   insertar(&inicio,4);
   insertar(&inicio,iValor); //Aqui el valor que ingresamos
   mostrar(&inicio);  // Finalmente mostramos
}


PD: Cuando programes no te desesperes, sino no podrás analizarlo al 100%, ahora espero que no copies el codigo sino que lo entiendas y lo hagas por ti mismo, ahora puedes implementar las demas funciones, modificar, eliminar, buscar. Te he hecho el programa de la manera más facil para que comiences de la mejor manera, con esto ya te habras dado cuenta que es muy facíl programar listas enlazadas.


Fashion
« Última modificación: Abril 12, 2008, 02:30:01 por Fashion » En línea



Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion
Referencie Mi Nick Click Aquí
ECDundy
Habitual
*****
Desconectado Desconectado

Mensajes: 164


throw new exception(":)");

erick_cartman_ok
Ver Perfil WWW Email
« Respuesta #4 en: Abril 30, 2008, 02:05:01 »

en c# seria asi:
using System;
using System.Collections;

namespace Weboo.Programacion
{

public class Nodo{
public object valor;
public Nodo prox;
public Nodo(object x, Nodo proximo){
  valor = x; prox = proximo;
}
}
public class LinkedList:IEnumerable { //Debería implementar IList y ICollection
Nodo primero;
Nodo ultimo;
int cuantos;

//No hace falta constructor, la inicialización por defecto basta

public void Add(object x){
  //No hay una operación especial de crecimiento, en teoría la lista no se llena siempre que haya memoria
  Nodo nodo = new Nodo(x, null);
  if (cuantos == 0){
    primero = nodo; ultimo = nodo;
  }
  else{
    ultimo.prox = nodo; ultimo = nodo;
  }
  cuantos++;
}

public int Count{
  get{ return cuantos;}
}

public bool Contains(object x){
  Nodo cursor = primero;
  for (int k=1; k<=cuantos; k++)
    if (cursor.valor.Equals(x)) return true;
    else cursor = cursor.prox;
  return false;
}

public void Remove(object x){
  Nodo anterior = primero;
  Nodo cursor = primero;
  while (cursor!=null){
     if (cursor.valor.Equals(x))
     {
     if (cuantos == 1)
     {
     primero = ultimo = null;
     }
     else if (cursor == primero)
        primero = cursor.prox;
     else
     {
        anterior.prox = cursor.prox;
        if (ultimo = cursor) ultimo = anterior;
     }
      cuantos--; return;
    }
    else{
      anterior = cursor;
      cursor = cursor.prox;
    }
  }

  //Implementar void RemoveAt(int index), void Insert(int index), el indexer this[] para accederlos con notación array
}

    public IEnumerator GetEnumerator(){
      return new ListEnumerator(primero);
    }

    class ListEnumerator: IEnumerator{
      bool hayCurrent, hizoMoveNext;
      Nodo cursor, primero;
      object current;
      public ListEnumerator(Nodo nodo){
        primero = nodo;
        Reset();
      }
      public bool MoveNext(){
        hizoMoveNext=true;
        if (cursor!=null){
          current = cursor.valor;
          hayCurrent = true;
          cursor = cursor.prox;
        }
        else hayCurrent = false;
        return hayCurrent;
      }
      public object Current{
        get{
          if (hizoMoveNext){
            if (hayCurrent) return current;
            else throw new Exception("No hay más elementos");
          }
          else throw new Exception("Debe hacer MoveNext primero");
        }
      }
      public void Reset(){
        hizoMoveNext=false;
        cursor = primero;
      }
     }
  }
  class Class1
   {
      [STAThread]
      static void Main(string[] args){
      LinkedList list = new LinkedList();
      list.Add("rojo");
      list.Add("blanco");
      list.Add("azul");
      list.Add("negro");
      Console.WriteLine("Hay {0} elementos", list.Count);
      Console.WriteLine("\nLos elementos son");
      foreach (string s in list)
        Console.WriteLine("  {0}", s);
      Console.WriteLine("\nLa lista contiene azul es {0}", list.Contains("azul"));
      list.Remove("blanco");
      Console.WriteLine("\nDespues de quitar blanco hay {0} elementos", list.Count);
      Console.WriteLine("\nLos elementos son");
      foreach (string s in list)
        Console.WriteLine("  {0}", s);
      list.Add("azul");
      Console.WriteLine("\nDespues de añadir azul hay {0} elementos", list.Count);
      Console.WriteLine("\nLos elementos son");
      foreach (string s in list)
        Console.WriteLine("  {0}", s);
      list.Remove("rojo");
      Console.WriteLine("\nDespues de quitar rojo los elementos son");
       foreach (string s in list)
        Console.WriteLine("  {0}", s);
      list.Remove("azul");
      list.Remove("verde");
      list.Remove("azul");
      Console.WriteLine("\nDespues de quitar azul, verde y azul los elementos son");
       foreach (string s in list)
        Console.WriteLine("  {0}", s);
      list.Remove("negro");
      list.Remove("negro");
      list.Add("amarillo");
      Console.WriteLine("\nDespues de quitar negro dos veces y añadir amarillo los elementos son");
       foreach (string s in list)
        Console.WriteLine("  {0}", s);
   
      }
   }
}
En línea


Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion

Para ver los enlaces debes ser usuario Crear Usuario o Hacer Sesion

<br="The cat with a glass eye and fire in the tail"
 href="http://www.programmersheaven.com/user/ECDundy/blog/"/>
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Carbide C/C#/C++  |  Tema: listas enlazadas en C « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC