Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удалить из списка мин. элемунт 
:(
    Опции темы
bobbyserf
Дата 20.9.2015, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.12.2014

Репутация: нет
Всего: нет



Помогите, пожалуйста, исправить/переделать удаление из списка мин. элемента.


Код

#include<iostream>
#include<stdlib.h>
#include<time.h>
#include <string>
using namespace std;
struct nodes{
    int data;
    nodes* prev;
    nodes* next;
};
int mini=NULL;

nodes* generate(int n);     // создаем список из n элементов, возвращаем указатель на голову.
void show(nodes* q);      // выводим на экран все элементы начиная с  *q.
void search_min();
void Delete(nodes* q, nodes* mini);
void destruct(nodes* q);  // Уничтожит все элементы списка начиная с *q.

int main(void)
{
    nodes* p1 = generate(5);
    show(p1);
    //=========================Решение
    nodes* iterator = p1;
    if(iterator->data<0) // отрицательные
    {
        iterator->prev = new nodes;
        iterator->prev->data= iterator->data*(-1);
        iterator->prev->prev = NULL;
        iterator->prev->next = iterator;

        p1 = iterator->prev;
    }
    if(iterator->data>=0) // положительные
    {
        iterator->prev = new nodes;
        iterator->prev->data= iterator->data;
        iterator->prev->prev = NULL;
        iterator->prev->next = iterator;

        p1 = iterator->prev;
    }

    while(iterator->next!=NULL){
        if(iterator->next->data<0) // отрицательные
        {
            iterator->next->prev = new nodes;
            iterator->next->prev->data = iterator->next->data*(-1);
            iterator->next->prev->next = iterator->next;
            iterator->next->prev->prev = iterator;

            iterator->next = iterator->next->prev;
            iterator = iterator->next;
        }
      
        if(iterator->next->data>=0) // положительные
        {
            iterator->next->prev = new nodes;
            iterator->next->prev->data = iterator->next->data;
            iterator->next->prev->next = iterator->next;
            iterator->next->prev->prev = iterator;

            iterator->next = iterator->next->prev;
            iterator = iterator->next;
        }
        iterator = iterator->next;
    }
    //=========================

    show(p1);

    destruct(p1);
        p1 = NULL;
    return 0;
    
}

nodes* generate(int n) // задаем список случайным значением элементов
{

    srand(time(NULL));

    nodes* head = new nodes;
    head->next = NULL;
    head->prev = NULL;
    head->data = rand()%10-6;
    for(int i=1;i<n;i++){
        head->prev = new nodes;
        head->prev->next = head;
        head->prev->prev = NULL;
        head->prev->data = rand()%10-6;
        head = head->prev;
    }

    return head;
}

void show(nodes* q)
{
    if(q == NULL) return;
    while(q!=NULL){
        cout<<q->data<<"\t";
        q = q->next;
    }
    cout<<endl;
}

void destruct(nodes* q)
{
    if(q == NULL) return;

    do{
        nodes* tmp = q;
        q = q->next;
        delete tmp;
    }
    while(q!=NULL);

} 

int search_min(nodes* q)//поиск min элемента
{
    
    nodes *current=q;
    int min=current->data;
    while(current!=NULL)
    {
        if(current->data<min)
         min=current->data;
         current=current->next;
    }
    return min;
}

void *Delete(nodes *q, int mini)//удаление min элемента
{
    if (q!=NULL)
      {
          if(q->data==mini)
          {
              nodes *current=q;
              
              q=q->next;
              
              
              
              delete current;
              //удаление предыдущего ;
              return q;
          }
          else 
          {
              nodes *current=q;
              while ((current!=NULL)&&(current->data!=mini))
              current=current->next;
              if(current!=NULL)
              {
                  current->prev->next=current->next;
                  if (current->next!=NULL)
                  (current->next)->prev=current->prev;
                  delete current;
                  return q;
              }
              
          }
      }
}

PM MAIL   Вверх
feodorv
Дата 21.9.2015, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(bobbyserf @  20.9.2015,  21:04 Найти цитируемый пост)
исправить/переделать

Я бы помог исправить/переделать, но где код этого дела?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
rudolfninja
Дата 21.9.2015, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Я бы сделал так, чтоб функция, которая находит минимальный элемент, возвращала не значение минимального элемента, а адрес узла, который содержит минимальный элемент. Таким образом у вас будет узел, который надо удалить.
Ну а удаление элемента из односвязного списка просто найти в интернете. 
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0446 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.