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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2011, 22:05   #1
роксис
Новичок
Джуниор
 
Регистрация: 30.06.2011
Сообщений: 1
Печаль ошибка в программе....динамические структуры....

в данной программе удаляется не сам элемент,а все остальные,а нужно что бы удалялся только он.....пожалуйста помогите исправить программу.....


Код:
#include <iostream>       // Подключение заголовочных файлов.
#include <string>         // Для работы с величинами класса string.
#include <fstream>        // Для работы с текстовыми потоками. 
using namespace std;      // Стандартное пространство имён.

int n, nom;
struct Spisok 
{
   string  word;             // Информационное поле.
   Spisok  *next, *prev;     // Адресное поле. 
};
typedef Spisok *Spis;

Spis Formir ()             // Формирование двунаправленного списка. Создание одного элемента.
{
	Spis NewSpisok = new (Spisok);
	cout << " Фамилия? ";
	cin>>(NewSpisok->word);
	NewSpisok->prev = 0;
	NewSpisok->next = 0;
	return NewSpisok;
}

Spis Sozdan()               // Создание списка.
{
	Spis Head, p, u;
	do
	{
	cout << " \n\nВведите количество записей в списке: "; cin >> n;
	if(n<=0) cout << " Столько элементов быть не может...";
	}
	while (n<=0);
	
	if (n>0)
	{
		Head=Formir();
		u=Head;
		for (int i=1; i<n; i++)
		{
			p=Formir();
			p->prev = Head;
			Head->next = p;
			Head=p;
		}
		return u;
	}
	else
		return 0;
}

void Out (Spis u)           // Печать списка.
{	
	Spis p = u;
	if (p==0)
	{
		cout << " Список пустой...\n";
		return;
	}
	while (p!=0)
	{
		cout << p->word<<endl;
		p=p->next;
	}	
}

void Delete(Spis &Head)     // Удаление элемента с заданным номером.
{	
	for (int i=0; i<nom; i++) {Head->next=NULL;}
}

void addition(Spis &Head)        // Добавление элемента в начало списка.
{
Spis now;
now=Formir();
now->next = Head;
Head=now;
}

void in_file (const Spis &Head,char x[])     // Запись списка в файл.
{
	
	ofstream u (x);
	if(x)
	{
		Spis p = Head;
		if (!p)
		{
			u << "Список пустой...\n";
			return;
		}    
		while (p!=0)
		{
			u << p->word << endl;
			p=p->next;
		}	
	}
	u.close();
}

Spis inFile(ifstream &f)     // Восстановление списка из файла. 
{		
	Spis NewSpisok = new (Spisok);	
	f >> NewSpisok->word;
	NewSpisok->prev=0;
	NewSpisok->next=0;
	return NewSpisok;
}
Spis vosstan(char u[])
{
	ifstream f(u);
	Spis Head = inFile(f);
	Spis pop = Head;
	Spis temp;
	while (!f.eof())
	{
		temp=inFile(f);
		if(f.eof())
			break;
		Head->next=temp;
		temp->prev=Head;
		Head=temp;
	}
	return pop;
}
void Delete_list(Spis&Head)          // Уничтожение списка.
{
	Spis p = Head;
	Spis temp;
	if (!p)
	{
		cout << "Список пустой...\n";
		return;
	}
	while (p!=0)
	{
		temp=p;
		p=p->next;
		delete(temp);
	}	
}

int main()
{
	setlocale(LC_ALL, "Russian");          // Подключение вывода кириллицы на экран.
	
	cout << " Записи в линейном списке содержат ключевое поле типа string.\n Сформировать двунаправленный список.\n Удалить из него элемент с заданным номером, добавить элемент в начало списка." << endl; 
    Spis Head;
	Head = Sozdan();
	cout << " Исходный список: "; cout << endl;
	Out(Head);
	cout << " Введите номер удаляемого элемента: "; cin >> nom;
	Delete(Head); 
	cout << " Список после удаления элемента: "; cout << endl;
	Out(Head);
	cout << endl;
	cout << " Добавление элемента:"; cout << endl;
	addition(Head);
	cout << " Список с добавленным элементом: "; cout << endl;
	Out(Head); cout << endl;
	char x[100];
	cout << " Куда записать список? (название файла с расширением!)   "; cin >> x;
	in_file (Head,x); cout << endl;
	cout << " Список удаляется...\n"; cout << endl;
	Delete_list(Head);
	cout << " Список пустой..." << endl; cout << endl;
	cout << " Список восстанавливается...\n"; cout << endl;
	Spis head=vosstan(x);
	cout << " Итоговый список: "; cout << endl;
	Out(head); cout << endl;
system("pause");
return 0;
}


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 01.07.2011 в 09:45.
роксис вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические структуры danilqa Паскаль, Turbo Pascal, PascalABC.NET 2 11.04.2011 12:16
динамические структуры Елена Лапуля Помощь студентам 3 04.05.2010 08:57
Динамические структуры!!!! Oooooleg Помощь студентам 4 22.05.2009 14:15