Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++] Deallocazione nesimo elemento di una lista semplice.

    Wè gente. Vi espongo brevemente il problema. Devo costruire una lista da tastiera (ok, fatto), renderla circolare (ok, fatto) e deallocare un elemento. Ho provato, modificando i vari puntatori .. e provato a stampare la nuova lista, ma alchè il programma sbrocca. Inizia a scrivere infinite volte un numero a caso ..



    #include <cstdlib>
    #include <iostream>

    using namespace std;

    struct elem {
    int info;
    elem* next;};

    void circo (elem* l);

    void deall (int n, elem* l);

    int main(int argc, char *argv[]) {
    int x,n;
    char r,s,v;

    elem* l=0;
    elem* aux;
    elem* aux1;


    aux=new elem;
    cout << "Inserisci il valore info dell'elemento: ";
    cin >> x;
    aux->info=x;
    aux->next=0;
    l=aux;

    cout << "Desideri continuare? (Y/N) ";
    cin >> r;
    while (r=='Y') {
    aux=new elem;
    cout << "Inserisci il valore info dell'elemento: ";
    cin >> x;
    aux->info=x;
    aux->next=l;
    l=aux;
    cout << "Desideri continuare? (Y/N) ";
    cin >> r;}

    cout << "Desideri rendere circolare la lista? (Y/N) ";
    cin >> s;
    if (s=='Y') circo(l);


    aux1=l;
    while (aux1->next != l) aux1=aux1->next;
    aux1=aux1->next;
    cout << "E' circolare, difatti il primo elemento della lista e': " << aux1->info <<".\n";

    cout << "Desideri deallocare la lista? (Y/N) ";
    cin >> v;
    if (v=='Y') deall (n, l);

    aux=l;
    cout << "La nuova lista e' la seguente: ";
    while (aux->next != l) cout << aux->info;










    system("PAUSE");
    return EXIT_SUCCESS;
    }


    void circo(elem* l) {
    elem* aux;
    aux=l;
    while (aux->next != 0) aux=aux->next;
    aux->next=l;}

    void deall(int n, elem* l) {
    int i=0;
    int j=(i-1);
    elem* aux=l;
    elem* aux1=l;
    cout << "Inserisci l'elemento n da deallocare: ";
    cin >> n;
    for (i=0; i<=n; i++)
    aux=aux->next;
    for (j=0; j<=(n-1); j++)
    aux1=aux1->next;
    aux1->next=aux->next;
    delete aux;
    return;}


    ---


    Secondo me il problema 'sta nel void deall (i passaggi precedenti fungono: la lista viene scritta e resa circolare per bene) .. però non ci riesco a sortir le gambe.

    Sarò eternamente grato a chi mi aiuta.

  2. #2
    Dai, dai. Qualcuno?

  3. #3

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.