|
04.04.2007, 23:42
|
#1
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Списки данных
Как организовать списки? стеки/очереди?
гугл ничо вразумительного не говорит.
|
(Offline)
|
|
05.04.2007, 01:29
|
#2
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Re: Списки данных
смотри STL =) std::list, std::vector, std::map, std::hash_map, std::queue, std::stack и еще куча всякого добра =)
или те руками нада? =)
|
(Offline)
|
|
05.04.2007, 01:44
|
#3
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Списки данных
руками надо
|
(Offline)
|
|
05.04.2007, 12:24
|
#4
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Списки данных
А в чем проблема?
|
(Offline)
|
|
05.04.2007, 15:05
|
#5
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Re: Списки данных
ну руками смотри в сторону связанных списков =)
он чо-то типа этого:
template<typename _Ty>
class LinkedList
{
public:
LinkedList * _prev;
_Ty _data;
LinkedList * _next;
};
методы нужные сам напишешь =)
З.Ы. ммм, а зачем вообще те руками писать? =) чем стандартные не устраивают?
|
(Offline)
|
|
05.04.2007, 15:09
|
#6
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Списки данных
http://www.boolean.name/showthread.php?t=1253 ну вот жеш. разве не то? принцип один и тот же
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
07.04.2007, 14:24
|
#7
|
Танчики Developer
Регистрация: 29.01.2007
Сообщений: 539
Написано 16 полезных сообщений (для 23 пользователей)
|
Re: Списки данных
все потихоньку на С++ переходят...
|
(Offline)
|
|
07.04.2007, 14:34
|
#8
|
Легенда
Регистрация: 01.10.2006
Сообщений: 3,705
Написано 296 полезных сообщений (для 568 пользователей)
|
Re: Списки данных
Сообщение от Leito
все потихоньку на С++ переходят...
|
Это суровая правда жизни...
|
(Offline)
|
|
07.04.2007, 18:47
|
#9
|
Бывалый
Регистрация: 05.09.2005
Сообщений: 823
Написано 101 полезных сообщений (для 205 пользователей)
|
Re: Списки данных
вот моя реализация однонаправленного списка, стека и очереди на его основе. Может, где-то криво, но работает.
|
(Offline)
|
|
07.04.2007, 19:56
|
#10
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Списки данных
Magus
Неплохо. Осталось написать поиск и обобщить с помощью шаблонов)
|
(Offline)
|
|
08.04.2007, 01:35
|
#11
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Списки данных
еще вопросы:
1 - чем хороши шаблоны?
2 - как с помощью них обобщать?
|
(Offline)
|
|
08.04.2007, 02:16
|
#12
|
Дэвелопер
Регистрация: 17.01.2006
Сообщений: 1,512
Написано 78 полезных сообщений (для 110 пользователей)
|
Re: Списки данных
Используя шаблон, не нужно привязываться к определенному типу.
Если, например, список написать при помощи шаблонов, можно будет создать списки любого типа, включая типы, определенные пользователем.
Так в STL сделано. И это единственно верный вариант.
|
(Offline)
|
|
08.04.2007, 11:21
|
#13
|
Зануда с интернетом
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений (для 20,935 пользователей)
|
Re: Списки данных
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
|
(Offline)
|
|
09.04.2007, 16:36
|
#14
|
☭
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений (для 2,707 пользователей)
|
Re: Списки данных
Вот моя реализация двунаправленных списков (отдельная спасиба Магусу за понятный и красивый код):
#include "stdafx.h"
#include <iostream.h>
class item
{
public:
int x;
item* next;
item* prev;
};
class list
{
public:
item* first;
item* last;
//===================================================
list(){
first=NULL;
last=NULL;
}
//===================================================
item* append()
{
item* temp;
temp = new item;
if(!first){
first=temp;
first->prev=NULL;
first->next=NULL;
}else{
if(!last){
last=temp;
first->next=last;
last->prev=first;
last->next=NULL;
}else{
temp->next=NULL;
temp->prev=last;
last->next=temp;
last=temp;
}
}
return temp;
}
//==================================================
item* crash(item* el)
{
if(!(el->next))
{
if(el->prev){
el->prev->next=NULL;
last=el->prev;}
}else{
if(!(el->prev)){
if(el->next){
el->next->prev=NULL;
first=el->next;}
}else{
el->next->prev=el->prev;
el->prev->next=el->next;
}
}
item* ret;
if (el->prev){ret=el->prev;}else{ret=NULL;}
delete el;
return ret;
}
};
int main(int argc, char* argv[])
{
list l;
l.append()->x=34;
l.append()->x=10;
l.append()->x=18;
l.append()->x=20;
l.append()->x=30;
l.append()->x=34;
l.append()->x=21;
printf("Hello World!\n");
for (item* e=l.first;e;e=e->next)
{
printf("x=%d\n",e->x);
}
for (e=l.first;e;e=e->next)
{
if (!(e->x % 10)){e=l.crash(e);}
}
printf("===========================================\n");
for (e=l.first;e;e=e->next)
{
printf("x=%d\n",e->x);
}
cout<<endl<<"enter char"<<endl;
char h;
cin>>h;
return 1;
}
в коде мне нравиться структура типа
for (item* e=l.first;e;e=e->next)
{
printf("x=%d\n",e->x);
}
понятно и просто делаются переборы.
собственно вопрос (с которыми я наверное уже вас всех достал):
есть класс item.
у него поле данных int x;
так вот, если мне необходимо чтоб у него были поля другого типа (да и другое количество) ?
есть идея - создать класс на основе класса item, например:
class bullet : item
{
public:
float y,z;
float spd;
int l;
};
, но тогда что делать с классом list, там повсюду используются указатели на класс item? создавать два новых класса, один из которых будет практически идиентичным базовому нехочецца.
может его зашаблонить? list я имею ввиду, тогда можн перегружть item как надо, чтобы можно было организовать свою структуру любой сложности.
|
(Offline)
|
|
09.04.2007, 19:32
|
#15
|
Дэвелопер
Регистрация: 14.02.2007
Сообщений: 1,471
Написано 824 полезных сообщений (для 2,920 пользователей)
|
Re: Списки данных
как раз надо использовать шаблоны =)
например:
template<typename _Ty>
class item
{
public:
_Ty x;
item* next;
item* prev;
};
это раз, потом сам list аналогично:
template<typename _Ty>
class list
{
public:
item<_Ty>* first;
item<_Ty>* last;
}
ну а потом пишешь:
ну и во всех функциях поменять типы возращаемых значений и аргументов по такой же схеме =)
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 16:21.
|