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

Очередь - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Динамический массив указателей http://www.cyberforum.ru/cpp-beginners/thread163417.html
Чегото не пойму такое вообще возможно? Странно, что при объявлении можно не указывать размерность: int *a; Но как потом память выделять не известно. Добавлено через 2 минуты p.s. прошу не путать с указателем на массив.
C++ Как выразить в С корень n-степени. Как выразить в С корень n-степени. Подскажите. http://www.cyberforum.ru/cpp-beginners/thread163391.html
C++ Объявление структуры и класса
Ругается на строку obj_cls.prv=3; и на объявление класса. Что у меня не правильно? #include <iostream> using namespace std; struct str { int pub; private: int prv;
Вычисление факториала C++
Помогите пожалуйста вычислить факториал:
C++ Сделать функцию "Команда" http://www.cyberforum.ru/cpp-beginners/thread163290.html
Может кто помочь написать функцию "команда", т.е. например в консольном приложении вводишь команду, например hello, в ответ выводится hello world и тому подобное, задавать команду примерно так: command("hello") { printf ("Hello World\n"); }
C++ Приложения для телефона Писать приложения для телефона можно только на Java? Просто я слышал, что можно писать на си++ приложения для телефона, это правда? подробнее

Показать сообщение отдельно
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
05.09.2010, 09:08     Очередь
Цитата Сообщение от easybudda Посмотреть сообщение
При извлечении первого элемента все остальные прийдётся на шаг влево смещать, а это очень накладно, каким бы образом ни было реализовано.
Именно, поэтому реализация очереди и стека на основе массива отличается именно этим моментом.
Вот пример реализации очереди на основе массива. Как видно в функции pop существует цикл для перемещения элементов, это не страшно для маленьких очередей, но для большого количества элементов просто ужас
Правда код на Си. Но суть должна быть ясна.
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
#include <stdio.h>
 
#define MAX_QUEUE_SIZE 0xF
 
typedef struct QUEUE {
    int array[MAX_QUEUE_SIZE];
    int rear;
} queue_t;
 
void erase(queue_t *q) {
    q->rear = MAX_QUEUE_SIZE;
}
 
int is_empty(queue_t *q) {
    return q->rear == MAX_QUEUE_SIZE;
}
 
void push(queue_t *q, int value) {
    if(q->rear == 0)
        fprintf(stderr, "queue is full\n");
    else
        q->array[--(q->rear)] = value;
}
 
int front(queue_t *q) {
    if(is_empty(q)) {
        fprintf(stderr, "queue is empty\n");
        return 0;
    }
    
    return q->array[MAX_QUEUE_SIZE - 1];
}
 
void pop(queue_t *q) {
    int i;
    
    if(is_empty(q)) {
        fprintf(stderr, "queue is empty\n");
        return;
    }
    
    for(i = MAX_QUEUE_SIZE - 1; i > q->rear; --i)
        q->array[i] = q->array[i-1];
    
    ++(q->rear);
}
 
int main()
{
    int i;
    queue_t q;
    
    erase(&q);
    for(i = 0; i < 10; ++i)
        push(&q, i + 1);
        
    while(!is_empty(&q)) {
        printf("%d -> ", front(&q));
        pop(&q);
    }
    printf("\b\b\b   \n");
}
 
Текущее время: 22:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru