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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.11.2018, 20:59   #1
XakProg
Пользователь
 
Регистрация: 11.10.2018
Сообщений: 15
По умолчанию Нужно изменить функцию чтоб она удаляла не положительные элементы, а отрицательные

Здравствуйте. Помогите пожалуйста , нужно изменить функцию чтоб она удаляла не отрицательные элементы а положительные (с++)

Код:
 void List::elementRemove(node *temp, node *prev)
{
if (temp == head)
{
head = temp->link;
delete temp;
}
else
if (temp == tail)
{
tail = prev;
delete temp;
}
else
{
//prev = temp->link;
prev->link = temp->link; // added
delete temp;
//temp = prev;
}
}
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 10.11.2018 в 22:10.
XakProg вне форума Ответить с цитированием
Старый 10.11.2018, 21:46   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,534
По умолчанию

На первый взгляд, оно не +/- удаляет, а что-то делает со списком. Просто в интернете код похожий попался ?
digitalis вне форума Ответить с цитированием
Старый 10.11.2018, 21:56   #3
XakProg
Пользователь
 
Регистрация: 11.10.2018
Сообщений: 15
По умолчанию

Да, похожий в интернете был.
Вот полностью код


Код:
#include "pch.h"
#include <iostream>
 
using namespace std;
 
struct node
{
    int info;
    node *link;
};
 
class List
{
protected:
    node *head; // Указатель на начало списка
    node *tail; // Указатель на конец списка
public:
    List();
    ~List();
    void fillingList(int);
    void searchNegative();
    void elementRemove(node*, node*);
    void outputList();
};
 
List::List()
{
    head = NULL;
    tail = NULL;
}
 
List::~List()
{
    node *temp = head; // Временный указатель на начало списка
    while (temp != NULL)
    {
        temp = head->link;
        delete head;
        head = temp;
    }
}
 
void List::fillingList(int n)
{
    int number;
 
    for (int i = 0; i < n; i++)
    {
        node *temp = new node; // Выделение памяти
        cin >> number;
        temp->info = number; // Временное запоминание принятого числа
        temp->link = NULL; // Указание, что следующее звено новосозданной структуры пока пустое
 
        if (head != NULL) // Если список не пуст
        {
            tail->link = temp; // Указание, что следующее звено списка это новосозданная структура
            tail = temp;
        }
        else
        {
            head = tail = temp; // Если список не пуст, добавление первого элемента
        }
    }
}
 
void List::searchNegative()
{
	node *temp = head; // Временный указатель на начало списка
	node *prev = temp;
	while (temp != NULL) // Пока в списке что-то встречается
	{
		if (temp->info < 0)
		{
			node* ptrToNext = temp->link; //added
			elementRemove(temp, prev);
			temp = ptrToNext;       //added
			continue;
		}
		prev = temp;
		temp = temp->link; // Сдвигаем указатель на начало на адрес следующего элемента
	}
}

void List::elementRemove(node *temp, node *prev)
{
	if (temp == head)
	{
		head = temp->link;
		delete temp;
	}
	else
		if (temp == tail)
		{
			tail = prev;
			delete temp;
		}
		else
		{
			//prev = temp->link;
			prev->link = temp->link;  // added
			delete temp;
			//temp = prev;
		}
}
 
void List::outputList()
{
    node *temp = head; // Временный указатель на начало списка
    while (temp != NULL) // Пока в списке что-то встречается
    {
        cout << temp->info << " "; // Выводим значения из списка на экран
        temp = temp->link; // Сдвигаем указатель на начало на адрес следующего элемента
    }
    cout << endl;
}
 
int main() {
    setlocale(LC_ALL, "russian");
    system("color F0");
 
    int n;
    
    List queue;
 
    cout << "Введите кол-во элементов списка: ";
    cin >> n;
    cout << "Введите числа: ";
    queue.fillingList(n);
 
    queue.searchNegative();
 
    queue.outputList();
 
    system("pause");
    return 0;
}
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 10.11.2018 в 22:11.
XakProg вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разместить элементы массива так,чтоб сначала шли все положительные числа,а потом-отрицательные, не создавая новый массив Wellshumor Помощь студентам 3 07.10.2018 13:36
Сначала записать отрицательные элементы затем положительные // C++ Loqwer78rus Помощь студентам 20 30.06.2014 22:02
Расположить элементы массива в порядке:отрицательные, положительные, нули FroZko C# (си шарп) 3 28.03.2013 15:20
Сформировать вектор x так, чтобы в нем чередовались положительные и отрицательные элементы из матрицы n Freedo Паскаль, Turbo Pascal, PascalABC.NET 17 15.11.2012 21:40
Все отрицательные элементы массива А заменить на сумму, а положительные на полусумму предшествующих Lada05 Помощь студентам 1 27.10.2010 15:44