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

Сортировка двусвязного списка - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.73
06041992
0 / 0 / 0
Регистрация: 06.01.2012
Сообщений: 13
20.02.2012, 22:02     Сортировка двусвязного списка #1
Разработать программу учета продажи и поступления товаров в магазин. Перечень товаров, имеющихся в магазине, оформить в виде линейного двусвязного списка. Предусмотреть возможность сортировки товаров по цене.
Код ниже. Зависает на условии в сортировке. Правильно ли определены указатели?
Среда Borland C.


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
126
127
128
#include <conio.h>
#include <stdio.h>
#include <iostream.h>
#include <stdlib.h>
#include <string.h>
 
 
struct Element {
char Name[20];
float price;
Element *Next;
Element *Previous;
};
 
 
class list
{
Element *begin,*end;
public:
int n;
void Add(void);
void Show (void);
void Sort(void);
void Menu(void);
list(){
begin=end=NULL;
};
 
~list()
{
Element *del;
while (begin)
{
del=begin;
begin = begin->Next;
delete del;
}
};
};
 
void list::Add(void)
{ Element *part= new Element;
cin >> part->Name;
cin >> part->price;
part->Next=NULL;
if (begin==NULL)
begin=part;
else
{
end->Next=part;
part->Previous=end;
}
end=part;
}
 
void list::Show(void)
{ Element *part=begin;
while (part!=NULL)
{
cout<<"\n "<<part->Name;
cout<<"\n "<<part->price;
cout<<"\n";
part=part->Next;
}
if(begin==NULL) cout<<"\n Empty \n";
getch();
}
 
void list::Sort(void)
{ Element *count,*prev;
int i=0,j;
count=begin;
prev=begin;
while (count->Next!=NULL)
{
for (j=0;j<n-i-1;j++)
if (count==begin&&(count->price >= count->Next->price))
{ prev=count;
count=count->Next;
prev->Previous=count;
prev->Next=count->Next;
count->Previous=NULL;
count->Next=prev;
}
if (count!=begin&&(count->price >= count->Next->price))
{prev=count;
prev->Previous=count->Next;
prev->Next=count->Next->Next;
count=count->Next;
count->Next=prev;}
i++;
}
getch();
}
 
 
void list::Menu(void)
{
list product;
int key;
clrscr();
do {
cout<<" 1 - Add\n"
<<" 2 - Sort*\n"
<<" 3 - Show \n"
<<" Esc - Exit \n";
 
key=getch();
switch (key) {
case 49 :
product.Add();
break;
case 50 :
product.Sort();
break;
case 51 :
product.Show();
break;
} clrscr();
} while (key!=27);
}
 
main()
{
list T;
T.Menu();
return 0;
}
 Комментарий модератора 
Используйте теги форматирования кода!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2012, 22:02     Сортировка двусвязного списка
Посмотрите здесь:

передача параметров в функцию (сортировка двусвязного списка)) C++
C++ [C++] Шейкер-сортировка двусвязного списка
Быстрая сортировка двусвязного списка C++
Сортировка двусвязного списка вставками C++
Итератор двусвязного списка C++
"Сортировка двусвязного списка путем исключения элемента с минимальным значением и включения его в начало нового списка C++
Реверс двусвязного списка C++
Сортировка кольцевого двусвязного списка (пузырьковая) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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