0 / 0 / 0
Регистрация: 20.05.2013
Сообщений: 4
1

Очередь как кольцевой массив

26.05.2013, 19:26. Показов 1228. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Очередь как кольцевой массив. Скопировать содержимое стека в очередь.
Помогите пожалуйста, я в программирование не особо, а сдать надо. Буду очень благодарна. =*
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2013, 19:26
Ответы с готовыми решениями:

Очередь как кольцевой массив
Очередь как кольцевой массив. Скопировать содержимое стека в очередь. Я в программирование не...

Кольцевой буфер(Кольцевая очередь)
Задали написать на Java кольцевой буффер. Только вот толкового описания строения и механизма работы...

Как переделать очередь основанную на массиве в циклическую очередь
Как переделать очередь основанную на массиве в циклическую очередь? Тут кое-какие попытки. Беда с...

Как делать накопление объектов классов в структуре типа массив, список или очередь
Пожалуйста, покажите примеры накопления...

1
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
12453 / 7478 / 1752
Регистрация: 25.07.2009
Сообщений: 13,748
26.05.2013, 23:53 2
Лучший ответ Сообщение было отмечено Anytka1 как решение

Решение

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
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
 
/****************** STACK **********************************/
 
typedef struct STACK {
    int * buf;
    int size;
    int top;
} * stack_t;
 
stack_t new_stack(int size) {
    stack_t stack;
    
    if ( size < 1 || ! ( stack = malloc(sizeof(struct STACK)) ) )
        return NULL;
    
    if ( ! ( stack->buf = malloc(sizeof(int) * size) ) ) {
        free(stack);
        return NULL;
    }
    
    stack->size = size;
    stack->top = 0;
    
    return stack;
}
 
int stack_is_full(stack_t stack) {
    return ( stack->top >= stack->size );
}
 
int stack_is_empty(stack_t stack) {
    return ( stack->top <= 0 );
}
 
void stack_push(stack_t stack, int value) {
    assert(stack && ! stack_is_full(stack));
    stack->buf[stack->top++] = value;
}
 
int stack_pop(stack_t stack) {
    assert(stack && ! stack_is_empty(stack));
    return stack->buf[--(stack->top)];
}
 
void delete_stack(stack_t stack) {
    assert(stack);
    free(stack->buf);
    free(stack);
}
 
/************************ QUEUE ****************************/
 
typedef struct QUEUE {
    int * buf;
    int size;
    int head;
    int tail;
    int empty;
} * queue_t;
 
queue_t new_queue(int size) {
    queue_t queue;
    
    if ( size < 1 || ! ( queue = malloc(sizeof(struct QUEUE)) ) )
        return NULL;
    
    if ( ! ( queue->buf = malloc(sizeof(int) * size) ) ) {
        free(queue);
        return NULL;
    }
    
    queue->size = size;
    queue->head = 0;
    queue->tail = 0;
    queue->empty = 1;
    
    return queue;
}
 
int queue_is_full(queue_t queue) {
    return ( queue->tail == queue->head && ! queue->empty );
}
 
int queue_is_empty(queue_t queue) {
    return ( queue->empty );
}
 
void queue_push(queue_t queue, int value) {
    assert(queue && ! queue_is_full(queue));
    queue->buf[queue->tail++] = value;
    queue->tail %= queue->size;
    queue->empty = 0;
}
 
int queue_shift(queue_t queue) {
    int ret;
    assert(queue && ! queue_is_empty(queue));
    
    ret = queue->buf[queue->head++];
    queue->head %= queue->size;
    queue->empty = ( queue->head == queue->tail );
    
    return ret;
}
 
void delete_queue(queue_t queue) {
    assert(queue);
    free(queue->buf);
    free(queue);
}
 
/************************* MAIN ******************************/
 
#define STACK_SIZE (10)
#define QUEUE_SIZE (4)
 
int main(void) {
    stack_t stack;
    queue_t queue;
    int i;
    
    assert(stack = new_stack(STACK_SIZE));
    assert(queue = new_queue(QUEUE_SIZE));
    
    for ( i = 0; i < STACK_SIZE; ++i )
        stack_push(stack, i + 1);
    
    while ( ! stack_is_empty(stack) ) {
        i = stack_pop(stack);
 
        if ( queue_is_full(queue) )
            while ( ! queue_is_empty(queue) )
                printf("%d ", queue_shift(queue));
                
        queue_push(queue, i);
    }
    while ( ! queue_is_empty(queue) )
        printf("%d ", queue_shift(queue));
    
    delete_stack(stack);
    delete_queue(queue);
    
    return(0);
}
http://codepad.org/SKSwMV4l
0
26.05.2013, 23:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2013, 23:53
Помогаю со студенческими работами здесь

Как реализовать кольцевой список
Помогите пожалуйста реализовать кольцевой список. А так же методы добавления элементов в список,...

Сформировать односвязную очередь из элементов, которые входят в очередь Q1, но не входят в очередь Q2
Составить программу обработки динамической структуры данных: сформировать односвязную очередь Q из...

Очередь (массив)
Нужна помощь в решении задачи. За один просмотр файла f типа real и без использования...

Как понять что кольцевой список кончился?
Как понять что кольцевой список кончился?


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru