Форум программистов, компьютерный форум CyberForum.ru

Отсортировать список - C++

Восстановить пароль Регистрация
 
aus
7 / 7 / 1
Регистрация: 18.10.2010
Сообщений: 56
29.05.2011, 20:02     Отсортировать список #1
Имеется двусвязный нециклический список, состоящий из вещественных чисел.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
struct LIST
{
        double val;
        LIST *next;
        LIST *pred;
};
LIST *head;
LIST *p=head;
int num=1;
//---------------------------------------------------------------------------
LIST *CreateNew(double element)
{
        LIST *p;
        p=new LIST;
        if(!p)
        return NULL;
        p->val=element;
        p->next=NULL;
        p->pred=NULL;
        return p;
}
//---------------------------------------------------------------------------
Шаблон структуры списка и создание списка

C++
1
2
3
4
5
6
7
8
9
10
11
12
LIST *InsertToList(LIST *head, double chislo)
{
        if(head==NULL)
        {
          LIST *pnew=CreateNew(chislo);
          pnew->next=head;
          return pnew;
        }
        head->next=InsertToList(head->next,chislo);
 
        return head;
}
Добавление элементов списка в конец (есть сомнения, что не правильно написал, хотя работает нормально)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int PrintList(LIST *head)
{
        Form1->ListBox1->Items->Clear();
        AnsiString buf = "";
        LIST *p = head;
        int i = 0;
        if(head == NULL) return 0;
 
        for(;p != NULL; p = p->next)
        {
 
                buf = p->val;
                Form1->ListBox1->Items->Add(buf);
                i++;
        }
        Form1->Label1->Caption = i;
        return i;
}
Вывод списка на экран

Теперь нужно написать функцию сортировки этого списка по убыванию.
Я уже запарился, не получается. Помогите кто чем может.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.05.2011, 20:02     Отсортировать список
Посмотрите здесь:

C++ Список массивов (заменить все элем. каждого массива ср. знач. и отсортировать список)
C++ Отсортировать список
Как отсортировать односвязный список???? C++
C++ Создать список студентов с оценками по нескольким дисциплинам. Отсортировать список по убыванию среднего балла. Имеющих двойки удалить из списка.
закольцевать и отсортировать двунаправленный список C++
С++ Отсортировать список спортивных команд C++
связной список (отсортировать по ключу) C++
Подсобите отсортировать список книг C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aus
7 / 7 / 1
Регистрация: 18.10.2010
Сообщений: 56
31.05.2011, 06:38  [ТС]     Отсортировать список #2
Все еще актуально
kjahert
48 / 48 / 5
Регистрация: 08.04.2011
Сообщений: 124
01.06.2011, 19:22     Отсортировать список #3
aus, похожее задание у меня (если не такое же), собстна в цикле выводит в обратном порядке
сортированый список, вот теперь думаю как его добавить в конец сортированого
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include <iostream.h>
#include <conio.h>
struct node
{
 int num;
 node *next;
};
 
node* toList(node* ,int);
node* fromList(node*, int );
void printList(node*);
 
void main()
{
 clrscr();
 int what,i,n;
 node *head=0;
 node *u=0;
 cout<<"input n=";
 cin>>n;
 cout<<endl;
 
 
 cout<<"input all what"<<endl;
 for (i=1;i<=n;i++)
 {
   cin>>what;
   head= toList(head ,what);
  }
  u=head;
   int temp=n;
while(temp!=0)
{
head=u;
 for( i=temp-1;i>0;i--)
 {
  head=head->next;
 }
  temp--;
  cout<<head->num<<" ";
 
 }        
 
 getch();
 }
 
node* toList(node* head ,int num)
{
 node* pv=new node;
 
 pv->num=num;
 pv->next=0;
 if (head)
 {
    node* cur=0;
   if(head->num> pv->num)
   {
     pv->next=head;
     head=pv;
   }
   else
   {
     cur=head;
     while((cur->next) && (cur->next->num < pv->num))
    cur=cur->next;
     pv->next=cur->next;
     cur->next=pv;
    }
  }
 else
   head=pv;
 return head;
 }
 
 
node* fromList(node* head, int num)
{
   int  prdel;
   node* erased=0;
   node* cur=0;
   node* buf=new node;
   buf->num=num;
   buf->next=0;
   if (( head->num) == (buf->num))
   {
      erased=head;
      head=head->next;
      delete erased;
   }
   else
   {
    cur=head;
    erased=cur->next;
    prdel=0;
    do
     {
      if ( buf->num==erased->num)
    {
     cur->next=erased->next;
     delete erased;
     prdel=1;
    }
      else
    {
      cur=erased;
      erased=cur->next;
    }
     }
 
    while  ((prdel==0) ||(erased != 0));
 }
 return head;
}
 
void printList(node* pv)
{
  if (!pv)
    cout<<"List is nil\n";
  else
    while(pv)
   {
     cout<<"="<<pv->num<<endl;
     pv=pv->next;
    }
}
Yandex
Объявления
01.06.2011, 19:22     Отсортировать список
Ответ Создать тему
Опции темы

Текущее время: 00:49. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru