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

Реализация очереди массивом - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ очередь, стек, вектор, множество http://www.cyberforum.ru/cpp-beginners/thread435161.html
не могу разобраться, если очередь и стек понятно что такое, то вектор и множество, я начинаю не понимать....вот если есть кусок кода с очередью и стеком, с вектором и множеством как? struct list_element { func* listfunc; list_element* next; list_element():listfunc(0),next(0){} };
C++ Задача на псевдографику. Здравствуйте. Помогите пожалуйста написать прототип функции.Суть состоит вот в чем: Имеется два массива char a = { '┌', '─', '┬', '┐', '├', '└', '┘', '┤', '┴', '┼', '│'} b = { '╒', '═', '╤', '╕', '╞', '╘', '╛', '╡', '╧', '╪', '║'} . На экран выводится таблицы, состоящая из символов массива а. Необходимо заменить все элементы этой таблицы на соответствующие элементы массива... http://www.cyberforum.ru/cpp-beginners/thread435155.html
C++ Как вернуть шаблонный итератор?
Например мне необходимо вернуть шаблонный итератор, но я не пойму почему не компилится, если без шаблона то все ОК. template <class T> vector<T>::iterator a<T>() { vector<T> f; return f.begin(); } Добавлено через 13 минут Вопрос снят. Нужно было сделать так.
C++ com порт
Здравствуйте. Стоит задача написать программу для связи компьютера и прибора через интерфейс RS232. Необходимо посылать данные на прибор примерно в таком виде: ESC 's' 'B' '2' '5' 'C' '0' '1' 'F' '4' где ESC это символ с кодом 27 (DEC), 0х1В (НЕХ). И разумеется нужно своевременно получать ответ с устройства. Скажите пожалуйста в каком направлении искать нужную информацию, и может быть...
C++ Отладка в среде wxDev C++ http://www.cyberforum.ru/cpp-beginners/thread435079.html
Когда запускаю отладку появляется окно с ошибкой "an error occurred in the application". Что с этим делать? Или это так и должно быть?
C++ Вычисление функций с использованием их разложения в степенной ряд Помогите пожалуйста с задачей: Постановка задачи: Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд в трех случаях: а) для заданного n; y=-1/2*ln*(1-2*x*cosPi/3+x^2) n=35. ln-(логарифм натуральный); Pi-(пи(3.14)); x^2-(икс в квадрате). подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9383 / 5433 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
27.01.2012, 02:21     Реализация очереди массивом
Цитата Сообщение от silent_1991 Посмотреть сообщение
полагаю, что-то в этом роде
Ну я примерно так же думал... Вот решил повыпендриваться
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
#include <stdio.h>
#include <stdlib.h>
 
enum STATE_CODES { SC_OK = 0, SC_EMPTY = 1, SC_FULL = 2, SC_WRONGPTR = 4 };
 
typedef struct FIXED_QUEUE {
    int *  fq_ptr;
    int    fq_read;
    int    fq_write;
    int    fq_size;
    int    fq_state;
} fqueue_t;
 
fqueue_t * new_queue(int size){
    fqueue_t * queue;
    
    if ( size < 1 || ! ( queue = malloc(sizeof(fqueue_t)) ) )
        return NULL;
    
    if ( ! ( queue->fq_ptr = malloc(sizeof(int) * size) ) ){
        free(queue);
        return NULL;
    }
    
    queue->fq_read = 0;
    queue->fq_write = 0;
    queue->fq_size = size;
    queue->fq_state = SC_EMPTY;
    
    return queue;
}
 
void del_queue(fqueue_t * queue){
    free(queue->fq_ptr);
    free(queue);
}
 
int push(fqueue_t * queue, const int value){
    if ( ! queue )
        return SC_WRONGPTR;
        
    if ( queue->fq_state == SC_FULL )
        return SC_FULL;
    
    queue->fq_ptr[queue->fq_write] = value;
    
    if ( ++(queue->fq_write) == queue->fq_size )
        queue->fq_write = 0;
    
    queue->fq_state = ( queue->fq_write == queue->fq_read ) ? SC_FULL : SC_OK;
    
    return SC_OK;
}
 
int pop(fqueue_t * queue, int * valptr){
    if ( ! queue || ! valptr )
        return SC_WRONGPTR;
        
    if ( queue->fq_state == SC_EMPTY )
        return SC_EMPTY;
    
    *valptr = queue->fq_ptr[queue->fq_read];
    
    if ( ++(queue->fq_read) == queue->fq_size )
        queue->fq_read = 0;
    
    queue->fq_state = ( queue->fq_read == queue->fq_write ) ? SC_EMPTY : SC_OK;
    
    return SC_OK;
}
 
#define flush_input() ({ char c; while ( scanf("%c", &c) == 1 && c != '\n' ) ; })
 
enum MENU_CHOICE { MC_QUIT = 0, MC_PUSH = 1, MC_POP = 2, MC_ERROR = 4 };
 
int menu(void){
    int ret;
    
    printf("\n----------------------------------------------------------------------\n");
    printf("%d - push value\n", MC_PUSH);
    printf("%d - pop value\n", MC_POP);
    printf("%d - quit\n", MC_QUIT);
    printf("----------------------------------------------------------------------\n\n> ");
    
    if ( scanf("%d", &ret) != 1 )
        ret = MC_ERROR;
    
    flush_input();
    return ret;
}
 
#define QUEUE_SIZE 5 /* маленькая такая очередь... */
 
int main(void){
    fqueue_t * fq;
    int val, ret;
    
    if ( ! ( fq = new_queue(QUEUE_SIZE) ) ){
        fprintf(stderr, "Memory error!\n");
        exit(1);
    }
    
    while ( ( ret = menu() ) != MC_QUIT ){
        switch ( ret ) {
            case MC_PUSH :
                printf("Value: ");
                if ( scanf("%d", &val) != 1 ){
                    fprintf(stderr, "Try to patch your hands.sys file\n");
                    flush_input();
                    break;
                }
                switch ( push(fq, val) ){
                    case SC_OK :
                        printf("Ok.\n");
                        break;
                    case SC_FULL :
                        printf("Queue is full!\n");
                        break;
                    case SC_WRONGPTR :
                        fprintf(stderr, "Wrong pointer exception!\n");
                        exit(1);
                    default :
                        fprintf(stderr, "Unknown error!\n");
                        exit(1);
                }
                break;
            case MC_POP :
                switch ( pop(fq, &val) ){
                    case SC_OK :
                        printf("Got value %d\n", val);
                        break;
                    case SC_EMPTY :
                        printf("Queue is empty!\n");
                        break;
                    case SC_WRONGPTR :
                        fprintf(stderr, "Wrong pointer exception!\n");
                        exit(1);
                    default :
                        fprintf(stderr, "Unknown error!\n");
                        exit(1);
                }
                break;
            default :
                fprintf(stderr, "Wrong menu choice!\n");
                break;
        }
    }
    
    del_queue(fq);
    printf("Good bye!\n");
    
    exit(0);
}
 
Текущее время: 05:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru