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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.10.2011, 13:40   #1
RaTeN
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 25
По умолчанию Удаление звена списка (динам. структ)

Написал функцию, но происходит ошибка

Код:
void Udalenie(Apteka *phead)
{
	int nomer;
	Apteka *t, *temp1, *temp2, *temp3, *temp4;
	t=phead; t=(*t).sled;
	cout<<"Введите номер удаляемой аптеки"<<endl;
	cin>>nomer;
	//нужно найти указатель на звено, которое мы будем УДАЛЯТЬ!
	while(t!=NULL)
	{
		if(nomer==(*t).nomer) temp1=(*t).sled; 
		t = (*t).sled;	
	}
	// temp1 указатель на звено, которое нужно удалить	
	
	
	temp2=(*temp1).sled;
	if(temp2!=NULL)
	{
		(*temp1).nomer=(*temp2).nomer;
		(*temp1).nazvanie=(*temp2).nazvanie;
		(*temp1).adres=(*temp2).adres;
		(*temp1).sled=(*temp2).sled;
		delete temp2;
	}
	else //если удаляемое звено последнее
	{
		temp3=phead; 
		temp4=(*temp3).sled;
		while(temp4!=temp1)
		{
			temp3=temp4;
			temp4=(*temp4).sled;
		}
		(*temp3).sled=NULL;
		temp4=NULL;
		delete (temp1);
	}
}
что не так?
RaTeN вне форума Ответить с цитированием
Старый 01.10.2011, 13:45   #2
RaTeN
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 25
По умолчанию

мб я не правльно нашел указатель на удаляемое звено?
RaTeN вне форума Ответить с цитированием
Старый 01.10.2011, 15:06   #3
_kilik_
Пользователь
 
Аватар для _kilik_
 
Регистрация: 16.08.2011
Сообщений: 69
По умолчанию

Чтоб было проще понять, старался ничего не менять.
Не проверял код . Если будут проблемы пиши.


Код:
void Udalenie(Apteka *phead)//Принимает  указатель на первый элемент в списке.
{
	int nomer;
	Apteka *t,*temp, *temp1, *temp2;
	//temp-преведущий->temp1-удаляем,->temp2-следущий,
	temp=t=phead;// t=t->sled;//пользуйтесь стрелочкой
	
	cout<<"Введите номер удаляемой аптеки"<<endl;
	cin>>nomer;
	//нужно найти указатель на звено, которое мы будем УДАЛЯТЬ!
	while(t!=NULL)//проходим по списку
	{
		if(nomer==t->nomer){ //пока не найдем нужный номер
			//temp1=(*t).sled;//вы будете удалять слуд елемент в списке ? 
			temp1=t;//если нашли нужный номер
			break;//выходим из цикла
		}
		temp=t;//сохраним преведущий элемент
		t = t->sled;	
	}
	// temp1 указатель на звено, которое нужно удалить	
	
	
	temp2=temp1->sled;
	if(temp1==phead){//если удаляем первый елемент в списке
		if(temp1->sled==NULL){//если в списке всего один елемент
			phead=NUUL;//список пуст
			delete temp1;
		}
		else{
			phead=temp2;//второй элемент теперь первый
			delete temp1;
		}
	}
	else if(temp2!=NULL)//если temp1 не последний елемент
	{
		temp->sled=temp2;//temp-преведущий->temp1-удаляем,->temp2-следущий|||temp-преведущий->temp2-следущий
		/*
		(*temp1).nomer=(*temp2).nomer;
		(*temp1).nazvanie=(*temp2).nazvanie;
		(*temp1).adres=(*temp2).adres;
		(*temp1).sled=(*temp2).sled;
		*/
		delete temp1;
	}
	else //если удаляемое звено последнее
	{
		temp->sled=NUUL;//предпоследнее теперь последнее
		delete (temp1);
		/*
		temp3=phead; 
		temp4=(*temp3).sled;
		while(temp4!=temp1)
		{
			temp3=temp4;
			temp4=(*temp4).sled;
		}
		(*temp3).sled=NULL;
		temp4=NULL;
		*/
		
	}
}

Последний раз редактировалось _kilik_; 01.10.2011 в 15:10.
_kilik_ вне форума Ответить с цитированием
Старый 01.10.2011, 15:53   #4
RaTeN
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 25
По умолчанию

спасибо!!!!
RaTeN вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление элемента списка igoldyrev Помощь студентам 2 06.03.2011 14:24
нужно визуальными средствами делфи сделать заполнение списка, добавление и удаление звена ksenechka5 Помощь студентам 0 04.01.2011 19:01
удаление из списка(си) zhenya.ya Помощь студентам 0 31.05.2010 19:36
Удаление последнего элемента из списка и реверс этого списка. Goose Общие вопросы C/C++ 8 16.05.2010 16:12
удаление элемента из списка yagluboko Помощь студентам 1 10.04.2010 14:54