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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.07.2010, 13:37   #1
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию Удаление элемента из списка

В списке нужно удалить элемент, по введенному номеру, помогите, не могу найти ошибку...
Код:
struct List 
{
    int number;
    bool status;
    List* next;
};

List *head = NULL;

void Add(List *element) // процедура создания списка
{
	List *new = new List;
	system("cls");

	new->number = element->number;

	new->status = 0;
	new->next = head;

	head = new;
}

List *add_bus() // добавление в список
{
	List *element = new List;

	cout<<"Vvedite nomer"<<endl;
	cin>>element->number;

	return element;
}

void Remove(List *head) // процедура удаления из списка списка
{
	int nomer = 0;
	List *rem = head;
	
	cout<<"\n Nomer dlya ydalenia: "<<endl;
	cin>>nomer;

	while(rem != NULL)
	{
		if (rem->number == nomer)
		{
			delete rem;
		}
		else 
		{
			cout<<"Het takogo nomera!!!"<<endl;
		}
		rem = rem->next;
	}
	system("cls");
}

int ShowMenu()
{
    char ch = '\0';
    // рисуем меню
	puts("1 : Add");
	puts("2 : Remove");
	puts("3 : Exit");

    ch = getch(); // считываем выбор пользователя
    
    return atoi(&ch); // возвращаем код выбранного меню
}

int main()
{
   while (1) // выполняем в бесконечном цикле
   {  
      switch( ShowMenu() ) // показываем меню и проверяем что выбрал пользователь
      {  
         case 1: Add(add_bus()); break;
         case 2: Remove(head); break;
         case 3: return 0;
         default:
              break;
      }
   }
}
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 09.07.2010, 14:10   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
delete rem;
Ошибка в том что удаляя элемент ты не соединяешь его предидущий и следующий элемент, рвя цепочку
Код:
void Remove(List *head) // процедура удаления из списка списка
{
	int nomer = 0;
	List *rem = head,*pred=nil;
	
	cout<<"\n Nomer dlya ydalenia: "<<endl;
	cin>>nomer;

	while(rem != NULL){
		if (rem->number == nomer){
                        if(pred){pred->next=rem->next;}
			delete rem;
                        break; 
		}		else 		{
			cout<<"Het takogo nomera!!!"<<endl;
		}
                pred=rem;
		rem = rem->next;
	}
	system("cls");
}
Не проверял но смысл в том чтоб перецепить связку предидущего на следующий за удаляемым элементом
I'm learning to live...

Последний раз редактировалось Stilet; 09.07.2010 в 14:12.
Stilet вне форума Ответить с цитированием
Старый 09.07.2010, 14:17   #3
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
List *rem = head,*pred=nil;
Что такое nil? компилятор на него ругается

Код:
error C2065: nil: необъявленный идентификатор
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Старый 09.07.2010, 14:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пардон
*pred=null;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.07.2010, 14:55   #5
bpystep
Форумчанин
 
Регистрация: 25.02.2009
Сообщений: 180
По умолчанию

подправил, не получалось, почитал в инете ошибку
Код:
0xfeeefeee
вот исправленный вариант:
Код:
void Remove(List *head) // процедура удаления из списка
{
	int nomer = 0;
	List *rem = head,*pred=NULL;
	
	cout<<"\n Nomer dlya ydalenia: "<<endl;
	cin>>nomer;

	while(rem != NULL){
		if (rem->number == nomer)
		{
            pred->next=rem->next;
			delete rem;break;
		}		 		
        pred=rem;
		rem = rem->next;
	}
	system("cls");
}
Тему можно закрывать, спасибо огрАмное.
Запомните, вы едете в Россию, поэтому когда компьютер попросит вас набрать пароль, наберите слово "Пароль"
bpystep вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление элемента из списка Ghost_gg Паскаль, Turbo Pascal, PascalABC.NET 2 30.05.2010 20:43
Удаление последнего элемента из списка и реверс этого списка. Goose Общие вопросы C/C++ 8 16.05.2010 16:12
Списки. Удаление элемента из списка. thexqn Помощь студентам 0 11.05.2010 09:04
удаление элемента из списка yagluboko Помощь студентам 1 10.04.2010 14:54
удаление элемента из списка aurora_87 Общие вопросы C/C++ 1 18.06.2009 14:02