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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2013, 00:27   #1
NinjaNoob
Пользователь
 
Регистрация: 02.10.2012
Сообщений: 40
По умолчанию c++ удаление элемента списка

есть структура
Код:
typedef struct StudentInfo //создание нового типа запись для хранения информационных полей элемента списка
{
	int id; 
	char surname[20]; 
	char name[20]; 
	char secondname[20];
	int year; 
	char faculty[10];
	char specialty[10];
	int course;
	int mid_ball;

} Student; //имя созданного типа

typedef struct List //создание нового типа запись для хранения информации элемента списка
{
Student inf; //информационные поля
struct List* NEXT; //указатель на следующий элемент списка
struct List* PREV; //указатель на предыдущий элемент списка
} Element; //имя созданного типа
есть функция, которая должна удалять элемент из списка, при вызове которой, после ввода значения isk, прога вылетает. Вижуал студия ругает функцию strcmp (открывает файл с её содержимым на ассемблере)
Код:
void DeleteElement(Element **Top) {
	Element *Current=*Top; //текущие указатели списков равны указателям на вершины списков
	int n=0; //результат поиска
	char isk[20]; //фамилия искомого студента
	system("CLS");
	if(Current==NULL) printf("Перед тем, как удалять элементы из списка, создайте его!\n");
	else {
		printf("Введите фамилию студента, чтобы удалить его:\n");
		scanf("%s",isk); //ввод фамилии искомого автора(он же удаляемый)
	while(Current!=NULL) {
		if(strcmp(Current->inf.surname,isk)==0) {
			n++; //поиск успешен
			if(Current==*Top) {
				*Top=(*Top)->NEXT; //вершиной становится следующий элемент
				Current->NEXT->PREV=NULL; //обнуление указателя новой вершины на предыдущий элемент
				free(Current); //освобождение памяти под старую вершину
			}
			else if(Current->NEXT==NULL) {
				Current->PREV->NEXT=NULL; //ссылка предпоследнего элемента на следующий обнуляется
				free(Current);  //память под старый конец списка освобождается
			} else {
				Current->NEXT->PREV=Current->PREV; //ссылка на следующий элемент у предыдущего элемента (относительно удаляемого) приравнивается следующем элементу
				Current->PREV->NEXT=Current->NEXT; //ссылка на предыдущий элемент у следующего элемента (относительно удаляемого) приравнивается предыдущему элементу
				free(Current); //память освобождается
			}
		}
	Current=Current->NEXT; //переход к следующему элементу
	}
	}
getch();
}
NinjaNoob вне форума Ответить с цитированием
Старый 28.01.2013, 04:01   #2
Ezhik Kihze
Форумчанин
 
Регистрация: 24.12.2012
Сообщений: 639
По умолчанию

Цитата:
Вижуал студия ругает функцию strcmp (открывает файл с её содержимым на ассемблере)
Телепатирую, у строк нет завершающих нулей...
ICQ: 677936656 Gmail: ekEmbed@gmail.com
Ezhik Kihze вне форума Ответить с цитированием
Ответ


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



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