Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамические структуры данных в С++ 
:(
    Опции темы
Vinnety
  Дата 7.3.2004, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 8.4.2003

Репутация: нет
Всего: нет



baaa.gif Помогите!
Как в С++ организовать динамическую структуру типа ОЧЕРЕДЬ, которая содержала бы в
себе информацию например : телефон, имя, указатель на следуюший елемент очереди ?

Подскажи, плиз, как работать с очередями ! baaa.gif

PM MAIL   Вверх
mr.DUDA
Дата 7.3.2004, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



используем STL и не паримся ("queue" - очередь, англ.):
Цитата
#include <stdio.h>
#include <queue>

// будем хранить данные в структуре типа:
struct SomeInfo_t
{
    char szName[20];
    char szTelephone[20];
   
    // конструктор
    SomeInfo_t(char *N, char *T)
    {
        strcpy(szName, N);
        strcpy(szTelephone, T);
    }
};


int main(int argc, char* argv[])
{
    // вот так объявляется очередь "q" из элементов "SomeInfo_t"
    std::queue <SomeInfo_t> q;

    // вот так добавляются элементы в хвост очереди
    q.push(SomeInfo_t("John", "555-123-344"));
    q.push(SomeInfo_t("Bill", "(023)11-33-44"));
    q.push(SomeInfo_t("Kate", "88-99-1010"));

    // сделаем цикл, пока очередь не пуста
    while(q.size())
    {
        // можно взять ссылку на элемент, а можно пользовать "q.front" напрямую
        SomeInfo_t &info = q.front();

        // выводим содержимое элемента
        printf("%s, phone: %s\n", info.szName, info.szTelephone);

        // удаляем элемент из головы очереди
        q.pop();
    }
   
    return 0;
}



--------------------
user posted image
PM MAIL WWW   Вверх
bel_nikita
Дата 7.3.2004, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



В MVC6 есть CList
#include <afxtempl.h>


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 7.3.2004, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Цитата
В MVC6 есть CList
#include <afxtempl.h>

имхо речь идёт об очереди. первый зашёл - первый вышел, или последний зашёл - первый вышел.


--------------------
user posted image
PM MAIL WWW   Вверх
CaptainFlint
Дата 7.3.2004, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Искатель сокровищ
**


Профиль
Группа: Участник
Сообщений: 393
Регистрация: 26.2.2003
Где: Москва

Репутация: нет
Всего: 23



mr.DUDA
А что такое очередь, как не список со специфичечким набором методов? Защищённо наследуем CQueue от CList с подставленным типом аргумента (чтобы нельзя было к методам CList обратиться), пишет Add() и Get() через методы CList'а (они очень простые должны получиться), и всё.
Конечно, можно использовать и STL, но это уже по вкусу. К тому же, если проект написан на MFC, то я лично, например, не люблю мешать эти две библиотеки...


--------------------
Почему же, ё-моё, ты нигде не пишешь "ё"?
--------------------
Для тех, кто не знает: CaptainFlint - это бывший Константин. ;) 
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 7.3.2004, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Цитата
А что такое очередь, как не список со специфичечким набором методов?

Не спорю, "очередь" - понятие чисто умозрительное. Это список, но из самого понятия предполагается, что добавить элемент можно только в хвост, а извлечь - только из головы списка. Можно юзать хоть CList, хоть TList билдеровский, но имхо STL предоставляет наиболее полный набор различных контейнеров - вот я и предлагаю пользоваться им.

Цитата
Конечно, можно использовать и STL, но это уже по вкусу. К тому же, если проект написан на MFC, то я лично, например, не люблю мешать эти две библиотеки...

Лично я предпочитаю (в последнее время) использовать STL даже в MFC-шных проектах вместо контейнеров от M$, тем более что есть выбор от средних до очень быстродействующих библиотек (STLPort от Silicon Graphics). Но это личное дело каждого. Автор вопроса ведь не сказал ни слова о платформе и технологиях! По-моему, ему бы подошёл даже вариант с собственным узкоспециализированным классом типа:
Цитата
class Member
{
    char *szName, *szTelephone;
    Member *Next;
   
    void Push() {...}
    Member *Pop() {...}
};

или что-то вроде того.


--------------------
user posted image
PM MAIL WWW   Вверх
Fantasist
Дата 8.3.2004, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


Профиль
Группа: Участник Клуба
Сообщений: 1517
Регистрация: 24.3.2002

Репутация: 4
Всего: 41



Цитата
А что такое очередь, как не список



Может быть и вектором. Так что не обязательно СList.

Цитата
последний зашёл - первый вышел


В этом случае обычно говорят о стеке.


--------------------
Волны гасят ветер...
PM MAIL   Вверх
mr.DUDA
Дата 9.3.2004, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 25
Всего: 232



Цитата
Цитата
последний зашёл - первый вышел

В этом случае обычно говорят о стеке.

или о буфере LIFO smile.gif


--------------------
user posted image
PM MAIL WWW   Вверх
bel_nikita
Дата 9.3.2004, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



mr.DUDA
Цитата
имхо речь идёт об очереди. первый зашёл - первый вышел, или последний зашёл - первый вышел

А это смотря как читать вопрос
Цитата
указатель на следуюший елемент очереди ?

Так что, не совсем понятно, что хочет человек очередь или список, а может и то и другое


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
Vinnety
Дата 10.3.2004, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 8.4.2003

Репутация: нет
Всего: нет



Это всё конечно хорошо! :-)
Но мне надо работать с очередью и под обычного Turbo C++ под DOS! :-(
И в данной версии нет такой директивы препроцессора как <queue> (как показано в первом ответе) !!!
Как выйти из такого положения confused.gif
PM MAIL   Вверх
Kurt
Дата 10.3.2004, 03:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


Профиль
Группа: Участник Клуба
Сообщений: 1662
Регистрация: 22.8.2003
Где: Краснодар

Репутация: нет
Всего: 36



Тогда тока ручками..
Хм..
Когда тебе это надо?


Это сообщение отредактировал(а) Kurt - 10.3.2004, 03:56


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
bel_nikita
Дата 10.3.2004, 14:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2304
Регистрация: 12.10.2003
Где: Поезд №21/22 ( ст . Прага )

Репутация: 21
Всего: 47



Vinnety А шаблоны поддерживает, твой компилер??
Вот держи, правда через шаблон сделанно, но можешь заменить шаблон дефайном, и всего то
Код
const unsigned int CountElements=0x50;

template<typename T>
 class cTPLQueue
 {
 public:
   cTPLQueue        (DWORD uiMaxLen=CountElements);
   ~cTPLQueue       ();
   inline int   AddItem (T const &Item);   // Put Msg in queue
   inline int   ReadItem(T &Item);         // Get Msg from queue
  inline DWORD GetQueue() const;          // Get quantity of elements

 protected:
   DWORD uiNotFull;
   DWORD uiMaxElements, uiSizeElem,uiElements;
   DWORD uiIn, uiOut, uiEndValue;
   void  *pMessageArray;
 };

template<typename T>
 cTPLQueue<T>::cTPLQueue<T>(DWORD uiMaxLen/* =CountElements */)
 {
   uiNotFull=1;
   uiIn = uiOut = 0;
   uiMaxElements=uiMaxLen;
   uiElements=0;
  uiSizeElem=sizeof(T);
   uiEndValue=uiSizeElem*uiMaxElements;
   pMessageArray=malloc(uiEndValue);
   if (!pMessageArray){  cprintf("Not enough memory for TPLQueue!\n");  };
 };

template<typename T>
 cTPLQueue<T>::~cTPLQueue<T>(){  if (pMessageArray) free(pMessageArray); }

template<typename T>
 inline int cTPLQueue<T>::AddItem(T const &Item)
 {
     
     if (!uiNotFull)
     {
       
       cprintf("TPLQueue is full!\n");
       return -1;
     };
     memcpy((char*)pMessageArray+uiIn, &Item, uiSizeElem);
     uiIn = (uiIn + uiSizeElem) % uiEndValue;
     uiNotFull=uiOut-uiIn;
   uiElements++;
     
     return 1;
 }

template<typename T>
 inline int cTPLQueue<T>::ReadItem(T &Item)
 {
     
     if (!uiNotFull) uiNotFull=1;
     else if (uiIn==uiOut) { return -1; }
     memcpy(&Item, (char*)pMessageArray+uiOut, uiSizeElem);
     uiOut = (uiOut+uiSizeElem) % uiEndValue;
   uiElements--;
     
     return 1;
 }

template<typename T>
  inline DWORD cTPLQueue<T>::GetQueue() const{return (uiElements);}

Да, еще, если встретишь в коде Lock() или UnLock() просто удали их, это я для других целей юзал


--------------------
user posted image — регистрация доменов от 150 руб.
PM MAIL WWW ICQ   Вверх
wnayk
Дата 16.12.2006, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.12.2006

Репутация: нет
Всего: нет



Ребят Здорова всем,СПАСИТЕ МНЕ ПОЖУЛУЙСТА ЖИЗНЬ... smile 
У меня через недельку надо будет курсовуху сдавать,если не сдам-мне пи... Задачка такая:
Магазин с одним продавцом.
Компьютер вместо кассового аппарата. База наличия товаров: наименование, единица измерения, цена единицы, количество, дата последнего завоза. Регистрация поступления товара( как старых ,так и новых наименований ). Оформление покупки: выписка чека, корректировка базы. Проблема уценки и описания. Инвентаризация остатков товара с вычислением суммарной стоимости. Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе. 

Может у кого то есть такая уже,ПППЛЛЛЛИИИЗЗЗЗ
или пришлите на [email protected]
PM MAIL   Вверх
Anikmar
Дата 16.12.2006, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 9
Всего: 59



Цитата(wnayk @ 16.12.2006,  11:09)
Ребят Здорова всем,СПАСИТЕ МНЕ ПОЖУЛУЙСТА ЖИЗНЬ... smile 
У меня через недельку надо будет курсовуху сдавать,если не сдам-мне пи... Задачка такая:
Магазин с одним продавцом.
Компьютер вместо кассового аппарата. База наличия товаров: наименование, единица измерения, цена единицы, количество, дата последнего завоза. Регистрация поступления товара( как старых ,так и новых наименований ). Оформление покупки: выписка чека, корректировка базы. Проблема уценки и описания. Инвентаризация остатков товара с вычислением суммарной стоимости. Программа должна обеспечивать диалог с помощью меню и контроль ошибок при вводе. 

Может у кого то есть такая уже,ПППЛЛЛЛИИИЗЗЗЗ
или пришлите на [email protected]

Ребят, ну давайте по правилам общаться!
Вверху страницы есть отдельная фраза:

Цитата

Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи". 


PM MAIL ICQ   Вверх
zabivator
Дата 16.12.2006, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 7.6.2006
Где: нск

Репутация: 1
Всего: 2



wnayk, тебя убьют, если ты не сдашь курсовую?  smile 
--------------------
#include <zabivator>int main( int, char * [] ){   while( Zabivator::жив() ) Zabivator::моск()++;   return 0;}
PM MAIL WWW ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0903 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.