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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2012, 00:29   #1
Alex_Dep
Пользователь
 
Регистрация: 18.01.2012
Сообщений: 26
Стрелка Односвязные списки VS C++ 2008

не могу сделать удаление отрицательного элимента. То есть сделал только так, что удаляет только в том случае, если отрицательное число стоит на первом места. Получается указатель не двигается по списку. помогите доделать код.
Код:
#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;
     while (body->next != NULL)
   {
     if (body->numer < 0)
       {
     del = head;
        break;
     }
  body = body->next;
  }
 if (del == NULL) 
  cout<<" Отрицательных элементов нет    ";
 {
       if (del == body)
	{
       head = head->next;
     delete del;
	 cout<<body<<" ";
	   body = body->next;
	 
 }
 }
	cout<<endl;
		}
		}
		}
From Stilet: Почему код не выделяем? Религия опять давит?

и еще если отрицательный элемен является концом списка он его видет не как отрицательный.

Последний раз редактировалось Stilet; 14.05.2012 в 15:01.
Alex_Dep вне форума Ответить с цитированием
Старый 14.05.2012, 14:31   #2
alezha
Форумчанин
 
Регистрация: 16.04.2011
Сообщений: 126
По умолчанию

Надо добавлять код используя #
alezha вне форума Ответить с цитированием
Старый 14.05.2012, 15:15   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

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

Stilet, спасибо большое.
Alex_Dep вне форума Ответить с цитированием
Старый 18.05.2012, 13:21   #5
Alex_Dep
Пользователь
 
Регистрация: 18.01.2012
Сообщений: 26
По умолчанию

а как ее переделать что бы удолял не первый отрицательный а все отрицательные?
Alex_Dep вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Односвязные списки. Killspamers Помощь студентам 7 19.03.2012 18:59
Односвязные списки Nike0 Общие вопросы C/C++ 0 26.12.2010 12:07
Односвязные списки Anna T Паскаль, Turbo Pascal, PascalABC.NET 2 19.12.2010 18:58
Односвязные списки art_stalker Общие вопросы C/C++ 5 21.04.2010 22:49
Односвязные линейные списки !!! salia Помощь студентам 1 12.10.2009 16:01