Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.03.2014, 14:22   #1
Niklitel
Пользователь
 
Регистрация: 30.10.2013
Сообщений: 19
По умолчанию Удаление узлов в односвязном списке

Помогите пожалуйста, не могу понять что не так. Нужно удалить узлы содержащие простые числа.Программа не удаляет!
Код:
#include<iostream>
#include<conio.h>
bool prost (int x)
{
    int s=0;
    for (int i=1; i<=x; i++) {
        if (x%i==0) {
            s++;
        }
    }
    if (s==2){
        return true;
    }
    return false;
};
struct node 
{
    int ch;
    node* link;
};
int main()
{
    setlocale(LC_ALL, "rus");
    using namespace std;
    node *top, *k;
    int w,n;
    top=NULL;
    cout<<"введите количество чисел"<<endl;
    cin>>n;
    cout<<"введите числа"<<endl;
    for (int i=0; i<n; i++) {
        cin>>w;
        k = new node;
        k->link = top;
        k->ch = w;
        top = k;
    }
    k = top;
    while (k != NULL)
    {
        cout<<k->ch<<endl;
        k = k->link; // Перемещение к следующему узлу
    }
    // Удаление узлов стека, содержащих простое число
    k = top;
    node *l = top;
    // Указатель на предыдущий узел
    while (k != NULL)
    {
        if (prost(k->ch)==true) 
        {
            if (k == top)
            { // Если простое число - вершина
                top = k->link;
                delete k;
                k = top;
            }
            else
            { // Ecли простое число не веpшина
                l->link = k->link;
                delete k;
                k = l->link;
            }
        }
        else
        { // Eсли не простое
            l = k;
            k = k->link;
        }
    }
    k = top;
    while (k != NULL)
    {
        cout<<k->ch<<endl;
        k = k->link; // Перемещение к следующему узлу
    }   
    getch ();
    return 0;
}
Niklitel вне форума Ответить с цитированием
Старый 01.03.2014, 14:41   #2
Niklitel
Пользователь
 
Регистрация: 30.10.2013
Сообщений: 19
По умолчанию

теперь все работает
Код:
 bool prost (int x)
{
    for (int i=2; i<=x/2; i++) 
        if (x%i==0) 
            return false;
    return true;
}
Niklitel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура удаления в односвязном динамическом списке по ключевым полям Riesig Помощь студентам 0 28.03.2013 21:03
Последовательный поиск в односвязном списке vo0vka Помощь студентам 2 01.12.2012 23:49
Очистка памяти в односвязном списке Sigwey Помощь студентам 0 28.12.2010 17:02
Поиск в односвязном списке DOJ Общие вопросы C/C++ 6 04.10.2009 13:34
Обмен местами 2х элементов в односвязном списке. amdbodia Общие вопросы C/C++ 4 31.05.2009 23:26