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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2012, 12:08   #1
Alex_Dep
Пользователь
 
Регистрация: 18.01.2012
Сообщений: 26
По умолчанию списки

не могу сделать удаление всех отрицательный элементов. сделал удаление всех отрицательных путем смешения очереди и в этом случаи он первый элемент не рассматривает. как мне сделать так что бы если первый элемент списка отрицательный он его удалял, и если все элементы в списке отрицательные удалял все элементы.
Код:
#include <iostream>
#include <windows.h>
#include <locale>
 using namespace std;

 class Node
{ 
	public:
	int numer;
	Node* next;
};
 void main()
{
	setlocale(LC_ALL,"rus");
	Node* head = NULL;
	Node* body = NULL;
	short action = -1;
	while (1)
	{
		cout<<"1. Добавить элемент"<<endl;
		cout<<"2. Просмотр списка"<<endl;
		cout<<"3. Поиск отрицательных элементов"<<endl;
		cout<<"4. Удаление первого отрицательного элемента"<<endl;
		cout<<"0. Выход"<<endl;
		cout<<"Ваш Выбор: ";
		cin>>action;

		if (action == 0)
		{
			system("CLS");
			break;
		}	
		if (action == 1)
		{
			system("CLS");
			Node* ptr = new Node;
			int m;
			cout<<"Введите Число: ";
			cin>>m;
			ptr->numer = m;
			ptr->next = NULL;
			if (head == 0)
			{	
				head = ptr;
				body = ptr;
				system("CLS");
				continue;
			}	
			body->next = ptr;
			body = ptr;
			system("CLS");
			continue;
		}

		if (action == 2)
		{
			Node* ptr = NULL;
			system("CLS");
			if (head == NULL)
			{	
				cout<<"СПИСОК ПУСТ";
				system("PAUSE");
				system("CLS");
				continue;
			}	
			cout<<" СПИСОК "<<endl;
			ptr = head;
			while (1)
			{
				cout<<ptr->numer<<" ";
				if (ptr->next == 0)
					break;
				ptr = ptr->next;
			}
			cout<<"\n\n";
			system("PAUSE");
			system("CLS");
			continue;
		}
		if (action == 3)
		{
			body=head;
			while (body!=NULL)
			{ 
				if (body->numer<0)
					cout<<body->numer<<" ";
				body = body->next;
			}	
			cout<<endl;
		}
		if (action == 4)
		{
            system("CLS");
            Node* del = NULL; 
            if (head == NULL) 
			{   
				cout<<" СПИСОК ПУСТ ";  
				system("PAUSE");    
				system("CLS"); 
				continue; 
			}
            body = head;
			Node *prev;
			prev=NULL;
			while (body->next != NULL) 
			{ 
				if (body->numer < 0) 
				{
					prev->next = body->next;
					if (body->next<0)
					delete body;	
				}
				prev=body;
				head = body->next;
			}
				while(prev->numer < 0)
				{
					delete prev;
					prev->next=body->next;
				}
	}
		}
	
	cout<<endl;
		}
Alex_Dep вне форума Ответить с цитированием
Старый 04.06.2012, 13:06   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
if (action == 4)
		{
            system("CLS");
            Node* del = NULL; 
            if (head == NULL) 
			{   
				cout<<" СПИСОК ПУСТ ";  
				system("PAUSE");    
				system("CLS"); 
				continue; 
			}
           
			while (head->next && head->numer<0) 
			{ 
                            del=head;
                            head=head->next;
			    delete del;	
                        }
		}
Смещать нужно голову, если хочешь удалить все первые отрицательные.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 05.06.2012, 11:35   #3
Alex_Dep
Пользователь
 
Регистрация: 18.01.2012
Сообщений: 26
По умолчанию

в этом случаии
Код:
if (action == 4)
		{
            system("CLS");
            Node* del = NULL; 
            if (head == NULL) 
			{   
				cout<<" СПИСОК ПУСТ ";  
				system("PAUSE");    
				system("CLS"); 
				continue; 
			}
           
			while (head->next && head->numer<0) 
			{ 
                            del=head;
                            head=head->next;
			    delete del;	
                        }
		}
он удаляет, но если после отрицательного числа встречается положительное и далее отрицательное он не удаляет следующий
отрицательный элемент. я не могу код переделать так что бы удалял только отрицательные во всем списке, если первый элемент отрицательный или другой элемент отрицательный и если в списке все элементы отрицательные выводил что "список пустой". помоги...
Alex_Dep вне форума Ответить с цитированием
Старый 05.06.2012, 13:42   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Цитата:
Сообщение от Alex_Dep Посмотреть сообщение
я не могу код переделать так что бы удалял только отрицательные во всем списке, если первый элемент отрицательный или другой элемент отрицательный и если в списке все элементы отрицательные выводил что "список пустой". помоги...
Вот, честно, сейчас мозг лопнет Что именно надо от конечного продукта?
eoln вне форума Ответить с цитированием
Старый 05.06.2012, 15:45   #5
Alex_Dep
Пользователь
 
Регистрация: 18.01.2012
Сообщений: 26
По умолчанию

что бы удалял все отрицательные элементы в списке. если они чередуются в любом порядке. и если в списке все отрицательные элементы, при удалении выводил что список пустой. вот так вроде))
Alex_Dep вне форума Ответить с цитированием
Старый 05.06.2012, 16:50   #6
InKo1
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 18
По умолчанию

while (head->next )
{
if(head -> number < 0){
del=head;
head=head->next;
delete del;
}
}
InKo1 вне форума Ответить с цитированием
Старый 05.06.2012, 16:58   #7
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

InKo1, а как же связи в списке? Потеряем всё к чертям.
Код:
if (action == 4)
{
	system("CLS");
	Node* del = NULL;
	Node* last = head;

	body=head;
	while (body!=NULL)
	{
		if (body->numer<0)
		{
			del=body;
			body=body->next;
			last->next=body;
			if (del==head) head=body;
			delete del;
		}
		else
		{
			last=body;
			body=body->next;
		}
	}
	if (head == NULL)
	{
		cout<<" СПИСОК ПУСТ ";
		system("PAUSE");
		system("CLS");
		continue;
	}
}
eoln вне форума Ответить с цитированием
Старый 05.06.2012, 17:49   #8
InKo1
Пользователь
 
Регистрация: 16.01.2011
Сообщений: 18
По умолчанию

Точно ведь, извиняюсь за недчет.
InKo1 вне форума Ответить с цитированием
Старый 05.06.2012, 19:28   #9
Alex_Dep
Пользователь
 
Регистрация: 18.01.2012
Сообщений: 26
По умолчанию

eoln, спасибо большое.
Alex_Dep вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Списки С++ Klausms Общие вопросы C/C++ 0 01.03.2012 22:09
списки Inna_L HTML и CSS 2 11.12.2010 17:34
Списки С\С++ Defo Помощь студентам 4 28.08.2009 17:31
списки sergeykl Паскаль, Turbo Pascal, PascalABC.NET 8 04.08.2009 23:05