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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
aus
7 / 7 / 1
Регистрация: 18.10.2010
Сообщений: 56
#1

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

29.05.2011, 20:02. Просмотров 968. Ответов 2
Метки нет (Все метки)

Имеется двусвязный нециклический список, состоящий из вещественных чисел.
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++
помогите пожалуйста Отсортировать список группы студентов по алфавиту (заданы ф.и.о. в одной строке,кодировка русская DOS)

Отсортировать список команд - C++
Решите пожалуйста задачу, ПОЖАЛУЙСТА! Отсортировать список команд по суммам очков двух туров футбольного чемпионата. Исходные данные...

связной список (отсортировать по ключу) - C++
нужно отсортировать связный список по ключу, проверьте, пожалуйста, я уже совсем запутался... void Sorted_List::insert(key_t...

Подсобите отсортировать список книг - C++
В инвентарной книге библиотеки для каждой книги указаны данные: инвентарный номер (7 цифр), автор, название, год издания, место издания...

Как отсортировать в двусвязном список? - C++
1.Нужно отсортировать по возрастанию 2 отсортировать по убыванию 3 отредактировать третий элемент присвоим ему другое числовое значение...

С++ Отсортировать список спортивных команд - C++
Ребят помогите пожалуйста. Структура списка: название команды - город - ФИО тренера - количество очков. Заполнить список и вывести его на...

Закольцевать и отсортировать двунаправленный список - C++
создать двунаправленный список с числами из диапазона от - 50 до + 50. после создания списка преобразовать его в кольцо. предусмотреть...

Отсортировать список структур по алфавиту - C++
Помогите, пожалуйста отсортировать список структуры по алфавиту. Необходимо учесть, повторяющиеся фамилии. Буду очень признателен за...

Как отсортировать односвязный список???? - C++
class lib { struct element { string data; element *next; element (string dat, element *nxt) : data(dat),...

Отсортировать список каманд по суммам очков.... - C++
Исходные данные или результат или и то и другое должно размещаться в текстовом файле. Отсортировать список команд по суммам очков двух...

Отсортировать список по возрастанию таким образом - C++
Необходимо отсортировать список по возрастанию таким образом: максимальный элемент перебрасывается в начало нового списка.помогите))

отсортировать двусвязный список через указатели - C++
До последнего пытался решить полностью задачу сам, но никак не могу отсортировать элементы в алфавитном порядке через указатели. Очень...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
aus
7 / 7 / 1
Регистрация: 18.10.2010
Сообщений: 56
31.05.2011, 06:38  [ТС]     Отсортировать список #2
Все еще актуально
kjahert
49 / 49 / 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;
    }
}
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru