Мне нужна структура, которая является частью массива и частью очереди фиксированного размера: я хотел бы иметь возможность добавлять число к одному концу, в то время как число на противоположной стороне сбрасывается.В то же время я хотел бы всегда иметь возможность сказать [i] или подобное и получить значение по этому индексу (просто заглянуть, не хлопать!).
Таким образом, прогресс должен выглядеть следующим образом:
a={2,3,4} | append a 5
a={3,4,5} | append a 99
a={4,5,99}| now ask for a[1], get 5
и т. Д.Есть ли какая-нибудь встроенная в C, которая делает то или иное.аналогичный?
EDIT2: В настоящее время я работаю с чем-то вроде этого, что, очевидно, довольно сильно зависит от реализации, при условии, что операция без знака char 255 + = 1 оценивается в 0:
#include <stdio.h>
#include <limits.h>
unsigned char p =0; // helper that provides the current tail of queue
int a[1 << CHAR_BIT]; // array of size 2^[bit-size of helper]
int from_a(unsigned char i) {
return a[(i+p)]; // addition of helper makes i the true index
}
void append_to_a(int x) {
a[0]=x;
p+=1; // rolling-over of unsigned char provides circularity
}
Just outинтерес, а не часть основного вопроса: есть ли другой язык, который имеет это?
РЕДАКТИРОВАТЬ:
Процесс должен быть автоматическим (не нужно добавлять, а затем поп /delete / shift ..) не требуется доступ на запись к существующим элементам (просто чтение, но индексирование).
Спасибо всем, кто ответил, что нет встроенного в C, и предлагал альтернативы.Я реализовал что-то странное, но deque, циклическая очередь / буфер и контейнер были ценными поисковыми терминами.
«Спасибо» всем, уверяющим меня, что в любой среде, полной Тьюринга, это как-то возможно - я бы отчаялся (мой вопрос был о встроенных программах, но знание того, что универсальные компьютеры действительно могут вычислять, довольно утешительно)).