-4

これが私のコードです。私が得ている問題は、削除部分を機能させることができないことです。構造体の要素を 1 つ削除したい。追加された要素を追加、検索、および削除する基本的な構造は次のとおりです。また、要素は昇順でソートされます。

#include <iostream>

using namespace std;

struct el {
    int key;
    el *next;
} *start;

void init();
void add(int n);
void list();
void search(int n); // ima za dopylvane
void deleter(int n);
void main() {
    init();
    int n, num;
    do {
        cout << "\n Menu\n";
        cout << "\n1 - Add element";
        cout << "\n2 - List elements";
        cout << "\n3 - Searching for element";
        cout << "\n4 - Delete element";
        cout << "\n5 - Exit";
        cout << "\n Your choice:";
        cin >> n;
        switch (n) {
            case 1:
                {
                    cout << "\n Input num:";
                    cin >> num;
                    add(num);
                    break;
                }
            case 2:
                {
                    list();
                    break;
                }
            case 3:
                {
                    cout << "\n Input num for searching:";
                    cin >> num;
                    search(num);
                    break;
                }
            case 4:
                {
                    cout << "\n Input num for deleting:";
                    cin >> num;
                    deleter(num);
                    break;
                }

        }
    }
    while (n != 5);
}
void list() {
    el *p = start;
    if (start) while (p) {
        cout << p->key << "  ";
        p = p->next;
    } else cout << "\n Empty list";
}
void init() {
    start = NULL;
}
void add(int n) {
    el *p = start;
    if (!start) {
        start = new el;
        start->key = n;
        start->next = NULL;
    } else {
        if (start->key > n) {
            start = new el;
            start->key = n;
            start->next = p;
        } else {
            el * q;
            while ((p->key < n) && (p->next)) {
                q = p;
                p = p->next;
            }
            if (p->key > n) {
                el *s;
                s = new el;
                s->key = n;
                s->next = p;
                q->next = s;
            } else {
                el *s;
                s = new el;
                s->key = n;
                s->next = NULL;
                p->next = s;
            }
        }

    }
}
void search(int n) {
    el *p = start;
    if (!start) cout << "\nEmpty list!";
    else while ((p->key != n) && (p-> next))
    p = p->next;
    if (p->key == n) cout << "\nYes!";
    else cout << "\nNo!";
}


void deleter(int n) {
    el *p = start;
    if (!start) cout << "Enfsad";
    else while ((p->key != n) && (p->next)) {
        n = start->key;
        start = start->next;
        delete p;
    }
}
4

1 に答える 1

2

あなたの削除機能は次のようになります。

void deleter (int n)
{
    el *p = start;
    el *prev = p;

    if (!start)
    {
        cout<<"Enfsad";
    }

    if(start->key == n)
    {
        start = start->next;
        delete prev;
    }
    else
    {
        while (p)
        {
            if(p->key == n)
            {
                prev->next = p->next;
                p->next = NULL;
                delete p; 
                break;
            }
            prev = p;
            p = p->next;
        }
    }
}

良いリンクリストがどうあるべきかを確認する必要があると思いますが。

于 2013-01-28T17:12:22.710 に答える