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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.06.2012, 19:01   #1
nathaly
Новичок
Джуниор
 
Регистрация: 03.06.2012
Сообщений: 1
Восклицание Двусвязный Нециклический список

хранит вещ. числа
операции:
1)Вставка элемента в список – новые элементы добавляются в конец списка
2)Удаление элементов – всех превышающих задаваемое значение.
3)Поиск элемента - по вводимому значению.
4)Сортировка списка по убыванию.
5)Распечатка всех элементов списка (на экран)

+открытие файла, сохранение списка в файл

помогите ,плиз,исправить прогу. заранее спасибо)

struct LIST//создание шаблона списка
{
double value;
LIST *next;
LIST *prev;
}
*head = NULL;

//-------------------------------------------------------

void FreeAll(void) //
{
LIST *p;
for( ; head !=NULL ; head = p)
{ p= head->next; //
delete head;
head = NULL; //
}
}

//------------------------------------------------------

LIST *CreateNew(double val) //
{
LIST *pnew = new LIST; //
if(!pnew)
{
ShowMessage("");
return NULL;
}
else
{
pnew->value = val;
pnew->next = NULL;
pnew->prev = NULL;
return pnew;
}
}

//-------------------------------------------------------

LIST *Searching(LIST *head, double value)
{
LIST *p;
for(p = head;p!=NULL;p=p->next)
{
if(p->value==value) return p;
}
return NULL;
}

//-------------------------------------------------------

LIST *Sorting(LIST *head, double val) //Сортировка по убыванию
{ LIST*pnew=CreateNew(val);//Создание нового элемента
if (!pnew) return head;
LIST *p, *prev=head;
if(!head) return pnew;//spisok pust
for(p=head; p!=NULL; p=p->next)
{ if(p->value> val)
{prev->next=pnew;
p->next=pnew;
return head;
}
prev=pnew;
}
return head;
}

//----------------------------------------------------

LIST *Insert(LIST *head, double val)
{
LIST * element = CreateNew(val);
if(head == NULL)
{

head = element;
return head;
}
else
{
LIST *p = head;
for(; p->next != NULL; p = p->next);
p->next = element;
element->prev = p;
return head;
}

}

//------------------------------------------------------
LIST * DeleteElement(LIST *head, double val)
{
LIST *p, *pp = NULL;
bool flag = false;
for(p = head; p!=NULL; p = p->next)
{
if(p->value == val)
{
flag = true;
if(pp == NULL)
{

if(p->next) p->next->prev = NULL; //
head = p->next;
}
else
{
if(p->next) p->next->prev = pp;
pp->next = p->next; // ???? ???? p->next == NULL
}
delete p;
return head;
}
pp = p;
}
if(!flag) ShowMessage("?????? ???????? ???");
return head;
}

//------------------------------------------------------
void DeleteElement2(double val)
{
if(head != NULL)
{ LIST *p = head, *pp = NULL;
for(; p != NULL
{
if(p->value > val)
{
pp = p->next;
head = DeleteElement(head, p->value);
p = pp;
}
else
p = p->next;
}
}
}
//---------------------------------------------------------------------------

int OpenList(AnsiString FileName)
{
FILE*pt;
//Если файл не открыт возвращаем -1
if((pt=fopen(FileName.c_str(),"rt") )==NULL) return -1;
else
{
Form1->Memo1->Clear(); //Очистка Memo1
//Заполняем список данными из файла
int i=0;
AnsiString buf; char buf2[10];
while(!feof(pt))
{
fgets(buf.c_str(),10,pt);
if(strlen(buf2)>0)
{

head=Insert(head,StrToFloat(buf2));
// buf="";
}
i++;
}
pt=head; //Перевод указателя чтения на начало списка
return 0;
}
fclose(pt); //
}


//---------------------------------------------------------------------------

void SaveToFile(LIST*head)
{ char buf[20]
FILE *pt=fopen(FileName.c_str(),"w");
if(!pt)
{ShowMessage("ne mogu steret file");
return;
}
while(head)
{double value=head->value;
ftoa(value,buf,10);
fputs(buf,pt);
fputs("\n',pt);
head=head->next;
}
fclose(pt);
}

//----------------------------------------------------------------------------

void MyPrint()
{ Form1->Memo1->Clear();
LIST *p;
for(p=head;p!=NULL;p=p->next)
{
Form1->Memo1->Lines->Add(FloatToStr(p->value));
}
}

Последний раз редактировалось nathaly; 03.06.2012 в 21:28.
nathaly вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двусвязный список Jess Mailes Помощь студентам 6 03.06.2012 21:47
Двусвязный список в C++. ЕвгенийЕрмак Помощь студентам 0 03.05.2012 20:21
Двусвязный Список. loki_man Паскаль, Turbo Pascal, PascalABC.NET 2 23.02.2012 22:59
Двусвязный список zais Общие вопросы C/C++ 3 20.11.2011 08:40
Двусвязный список Даsha Помощь студентам 3 26.06.2011 11:45