массив в режиме стека

Vладимир
Offline
Зарегистрирован: 27.01.2015
всем привет.
народ подскажите, можноли реализавать следущее
без использования постоянной перетусовки массива.
 
имеем массив с размерностью 10 для хранения переменных типа интегер,
используется в качестве стека (первым пришол первым уйдеш),
тобиш добавляем в последнюю ячейку а берем из первой .
сечас все работает но постоянно приходится перемещать все елементы массива в цикле ,
может есть возможность не использовать постоянный сдвиг в цикле а воспользоватся чем то другим , возможно указателями .
 
как эту задачу правильно реализовать ?
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Не понял в чём проблема. Заведите всё что угодно - индекс следующего пустого места или указатель на него. При добавлении этот индекс/указатель инкрементируйте, при удалении элемента декремнтируйте, проблема-то в чём?

Gippopotam
Gippopotam аватар
Offline
Зарегистрирован: 12.09.2014

Vладимир пишет:

всем привет.
народ подскажите, можноли реализавать следущее
без использования постоянной перетусовки массива.
 
имеем массив с размерностью 10 для хранения переменных типа интегер,
используется в качестве стека (первым пришол первым уйдеш),
тобиш добавляем в последнюю ячейку а берем из первой .
сечас все работает но постоянно приходится перемещать все елементы массива в цикле ,
может есть возможность не использовать постоянный сдвиг в цикле а воспользоватся чем то другим , возможно указателями .
 
как эту задачу правильно реализовать ?

Очередь: указатель устанавливается на первый элемент, при добавлении - указатель инкременируетсяя, при вычитании - декременируется. Данные берутся начиная с первого элемента и до указателя.

Стек: указатель устанавливается на последний элемент, при добавлении - указатель декременируется, при вычитании - инкременируется. Данные берутся с указателя.

 

Datak
Offline
Зарегистрирован: 09.10.2014

Vладимир пишет:
используется в качестве стека (первым пришол первым уйдеш)

"Первым пришел первым уйдеш" - это не стек, а FIFO. По-нашему точно не скажу, но скорее всего очередь.

Хотя, смысла это не меняет. Всё как написал ЕвгенийП - записываете и читаете массив по указателю или по индексу. Только, в отличие от стека, здесь указателей должно быть два, отдельных - для записи и чтения.

А вообще, при таком небольшом размере массива, может и не стоит с этим заморачиваться. Двигать указатели, и постоянно проверять их на выход за допустимые границы - операция не такая уж быстрая.

-----

Gippopotam, опередил! :)