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

Список элементами которого являются очереди - C++

Восстановить пароль Регистрация
 
fidzhi
5 / 5 / 1
Регистрация: 16.02.2011
Сообщений: 45
18.05.2011, 22:32     Список элементами которого являются очереди #1
Собственно сабж, нужно организовать список, элементами которого являются очереди.
Создать список - не проблема.
Создать очередь - тоже.
А вот совместить что-то в голове даже не получается. Подскажите в чем соль.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2011, 22:32     Список элементами которого являются очереди
Посмотрите здесь:

C++ Поиск в деке, элементами которого являются фигуры
Сформировать массив, элементами которого являются числа 2,1,4,3,6,5,...,100,99 C++
Вывод вектора, элементами которого являются структуры C++
C++ Формирование массива, элементами которого являются цифры числа N
C++ Создать массив, элементами которого являются структуры – список учеников
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fidzhi
5 / 5 / 1
Регистрация: 16.02.2011
Сообщений: 45
29.05.2011, 00:29  [ТС]     Список элементами которого являются очереди #2
Ап что ли
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
29.05.2011, 00:50     Список элементами которого являются очереди #3
C++
1
list<queue<int> > p;
в чем проблема
fidzhi
5 / 5 / 1
Регистрация: 16.02.2011
Сообщений: 45
29.05.2011, 01:18  [ТС]     Список элементами которого являются очереди #4
Цитата Сообщение от sandye51 Посмотреть сообщение
C++
1
list<queue<int> > p;
в чем проблема
Не совсем понял запись вашу. Мне нужно реализовать что-то типа банка, так вот стеком будут кассы, а очереди - очередями. Как я понял, добавить нужно в структуру стека указатель типа очереди. Но как потом например добавить мне элемент стека и на его прикрепить очередь?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
29.05.2011, 04:23     Список элементами которого являются очереди #5
список очередей
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
struct qdata {
    int n;
};
 
struct qnode {
    struct qdata d;
    struct qnode *next;
};
 
struct queue {
    struct qnode *head, *tail;
};
 
struct ldata {
    struct queue q;
};
 
struct lnode {
    struct ldata d;
    struct lnode *next;
};
 
struct list {
    struct lnode *head, *tail;
};
fidzhi
5 / 5 / 1
Регистрация: 16.02.2011
Сообщений: 45
29.05.2011, 13:07  [ТС]     Список элементами которого являются очереди #6
Блин я думал там все гораздо проще, с такими объёмами ещё не работал. Если не трудно, покажи как ты создашь список с элементами "1" и "2", и к ним очереди

Добавлено через 42 минуты
Я не могу понять как мне теперь функции добавления и вывода хотя бы сделать, объясните хоть немного

То есть, если мы работали со списком, при добавлении передавали **s-начало списка, если очередь -то **h,**t соответственно, но а тут что.

Добавлено через 1 час 44 минуты
Кто работал вообще со сложными структурами, есть у кого какие наработки*?
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
30.05.2011, 03:35     Список элементами которого являются очереди #7
Цитата Сообщение от fidzhi
покажи как ты создашь список с элементами "1" и "2", и к ним очереди
если название кассы ещё включать, то просто в данные списка добавляешь название кассы

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
struct qdata {
    int n;
};
 
struct qnode {
    struct qdata d;
    struct qnode *next;
};
 
struct queue {
    struct qnode *head, *tail;
};
 
struct ldata {
    char name[100];
    struct queue q;
};
 
struct lnode {
    struct ldata d;
    struct lnode *next;
};
 
struct list {
    struct lnode *head, *tail;
};
 
...
 
    struct list desklist = { NULL, NULL };
    struct queue tmp[2] = { { NULL, NULL }, { NULL, NULL } };
    
    queue_put(&tmp[0], 3);
    queue_put(&tmp[0], 2);
    queue_put(&tmp[0], 1);
    list_append(&desklist, "desk 1", &tmp[0]);
    
    queue_put(&tmp[1], 4);
    queue_put(&tmp[1], 5);
    queue_put(&tmp[1], 6);
    list_append(&desklist, "desk 2", &tmp[1]);
    
...
 
int queue_put(struct queue *p, int n)
{
    struct qnode node;
    struct qdata data;
    
    node = malloc(sizeof(struct qnode));
    data = malloc(sizeof(struct qdata));
    assert(node != NULL && data != NULL && "qnode allocation");
 
    node->d = data;
    node->d->n = n;
    node->next = NULL;
    
    if (p->tail) {
        p->tail->next = node;
        p->tail = node;
    } else
        p->head = p->tail = node;
 
    return 1;
}
    
int list_append(struct list *p, char *name, struct queue *q)
{
    struct lnode node;
    struct ldata data;
    
    node = malloc(sizeof(struct lnode));
    data = malloc(sizeof(struct ldata));
    assert(node != NULL && data != NULL && "lnode allocation");
 
    node->d = data;
    strcpy(node->d->name, name);
    node->d->q = *q;
    node->next = NULL;
    
    if (p->tail) {
        p->tail->next = node;
        p->tail = node;
    } else
        p->head = p->tail = node;
    
    return 1;
}
создаётся один список, в нём два узла, в каждом узле имя и очередь
имена уникальные, очереди уникальные
fidzhi
5 / 5 / 1
Регистрация: 16.02.2011
Сообщений: 45
31.05.2011, 21:17  [ТС]     Список элементами которого являются очереди #8
Спасибо, большое, Accept, пришла идея, прочитав твои примеры.
Попробывал сделать как хотел сам, решил остановиться на очереди очередей.
Посмотри пожалуйста код, в чем-то у меня прошиб огромный, я оставил комментарии там немного, чтобы мысль была понятна.
Пока задачу себе поставил такую: создать очередь касс, (Например 1,2,3). Человек потом хочет стать в очередь и вводит номер кассы, и добавляется в очередь именно на этой кассе. Проблема в том, что каждый раз создается новая очередь на элемент кассы, а не продолжается старая..
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
struct queue{
    char inf[50];
    queue *n;
};
 
struct mainq{
    char num[10];
    queue *q;
    mainq *n;
};
 
void add_cash(mainq **t,mainq **);
void showqueue(mainq *h);
void add_queue(mainq **h);
 
int main ()
{
    mainq *t=NULL,*h=NULL;  
        add_cash(&t,&h);
    add_queue(&h);
    add_queue(&h);
    add_queue(&h);
    add_queue(&h);
    getch();
}
 
void add_cash(mainq **t,mainq **h)//функция создания касс, она работает 100%но
{
    mainq *n;
    do
    {
        if(!(n=(mainq*)calloc(1,sizeof(mainq)))){
            perror("Memory error");
            return;
        }
        printf("Enter the number of cash:\n");
        fflush(stdin);
        gets(n->num);
        if (!*t)        // очередь еще не создана
        *t=*h=n;
        else
        {
            (*t)->n=n;
            *t=n;
        }
    }while((getch()=='y'));
    printf("Done!\n");
 
}
 
void add_queue(mainq **h)  //и функция создания очереди на каждую кассу
{
    char temp[123];
    mainq *s1=*h;
    puts("\nEnter the cash number");
    gets(temp);
 
    do   //вводим кассу, если такая есть в очереди касс, то ок
    {
        if(strcmp(s1->num,temp))
        {
            s1=s1->n;
            if(!s1) 
            {
                puts("\nNo cash");
                return;
            }
        }
        else{
            printf("\nCash has been found");break;
        }
 
    }while(s1);
 
    queue *nh,*nt,*tmp; //указатели на очереди
    nh=NULL,nt=NULL,tmp=NULL;
 
    nt=nh=(s1)->q;   //указатель на голову и хвост сразу указывают на очередь в главной очереди
 
    if(!(tmp=(queue*)calloc(1,sizeof(queue)))){
        printf("Error");return;
    }
 
    printf("\nEnter Surname");
    gets(tmp->inf);
 
    if(!nh)
    {
        (nh)=(nt)=tmp;
        printf("\n1st");   //просто добавил, чтобы контролировать, продолжает ли оно старую очередь на кассу, или создает новую
        
    }
    else
    {
 
        tmp->n=(nh);
        (nh)=tmp;
        printf("\n2nd ot more");
    }
}
Добавлено через 9 часов 50 минут
Разобрался, при создании очереди надо ещё присвоить указателю, который хранится в главной очереди указатель nh
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.06.2011, 04:06     Список элементами которого являются очереди
Еще ссылки по теме:

Сформировать массив В, элементами которого являются нули и единицы C++
Сформировать массив IM( 50 ) ,элементами которого являются числа 1,3,5,…,49,50,48,46 ,…,2 C++
C++ Реализуйте класс List, представляющий список, элементами которого являются целые числа

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

Или воспользуйтесь поиском по форуму:
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
01.06.2011, 04:06     Список элементами которого являются очереди #9
очередь очередей
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
struct data_a {
    int n;
};
 
struct qdata {
    void *p;
};
 
struct qnode {
    struct qdata d;
    struct qnode *next;
};
 
struct queue {
    struct qnode *head, *tail;
    enum { A, B } type;
};

тип очереди означает вид данных, которые она содержит
указатель p указываешь либо на объект типа struct data_a, либо на объект типа struct queue
Yandex
Объявления
01.06.2011, 04:06     Список элементами которого являются очереди
Ответ Создать тему
Опции темы

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