в данной программе удаляется не сам элемент,а все остальные,а нужно что бы удалялся только он.....пожалуйста помогите исправить программу.....
Код:
#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] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.