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

Быстрый стек, с малым обьемом памяти - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как считать строку? http://www.cyberforum.ru/cpp-beginners/thread84194.html
Зачем надо при считывания переменной типа string надо писать getline(cin, ...)? Зачем там cin? Разве там ожет быть что либо иное?
C++ Оценка времени работы Можете оценить время работы алгоритма? http://acm.timus.ru/problem.aspx?space=1&num=1100 - это задача, на которую он проходит По моему мнению это O( 3*(N+M) ), или просто O(N+M), где N - количество команд, M - количество задач #include <iostream> #define FOR(i,a,b) for (int i(a),_b(b); i < _b; ++i) int main() { http://www.cyberforum.ru/cpp-beginners/thread84187.html
C++ считывает текст из файла
Написать программу, которая считывает текст из файла и выводит на экран только строки, не содержащие двузначных чисел.
В чём ошибка? C++
мне надо чтоб програма получив строку проверила её и если в ней есть двузначные числа выводила всю строку. что я не так сделал? #include "stdafx.h" #include "iostream" #include "cctype" using namespace std; int _tmain(int argc, _TCHAR* argv) { bool flag; char *c=new char;
C++ Вырезать из матрицы всё лишнее, чтобы осталась только закрашенная часть http://www.cyberforum.ru/cpp-beginners/thread84170.html
Как можно вырезать из матрицы всё лишнее, чтобы осталась только закрашенная часть?
C++ Постфиксная и префиксная форма инкремента и декремента. Само задание: Написать программу с примерами постфиксной и префиксной формами инкремента и декремента. Число вводится с клавиатуры. #include<iostream.h> #include<stdio.h> int main(int args) { //Вводим с клавиатуры значение a и вычисляем значения c и d int a; int c; int d; подробнее

Показать сообщение отдельно
GRANDEATH
39 / 39 / 1
Регистрация: 13.09.2009
Сообщений: 108
10.01.2010, 23:31     Быстрый стек, с малым обьемом памяти
Я так понимаю, что ты хочешь сделать через списки.
Тебе потребуется массив из 1000 структур, содержащие
1. Смещение внутри твоего 19-ти элементного блока
2. Указатель на начало списка

Список состоит из структур, котрые, как уже я увидел ты сделал.

Суть в чем - у тебя есть массив из структур, назови его своеобразной кучей
struct data_block
{
int data[19];
data_block *next;
}
и есть массив битов, которые показывают свободен ли этот блок.
1. Запись
Записывай в текущем блоке преременные, пока смещение не будет 18 (счет в си с 0 )
Если блок забит - найди по биту первый свободный блок и пристыкуй его к своему списку.
Установи смещение на 0.
2. Чтение.
Считывай, пока смещение не станет 0.Как только стало нулем отстыкуй блок. Пометь его как свободный (для дальнейшего использования). Установи смещение на 18 (последный элемент).

В целом - это примитивный алгоритм.
Я бы описал основные данные так:
struct data_block
{
int data[19];
data_block *next;
} - твоя единица памяти
data_block array[ Максимальное_ЧИСЛО_БЛОКОВ_В_СИСТЕМЕ];
byte access[Максимальное_ЧИСЛО_БЛОКОВ_В_СИСТЕМЕ]; // Здесь бы использовать битовое поле. Но я его не знаю.

struct stack_begin
{
int offset;
data_block* last; //Это излишне. Для того, что бы каждый раз тебе не пробегать по списку, для нахождения последнего элемента. Быстродействие увечилит в разы, а память сожрет только паку килобайт (ну или десятков)
data_block* first; //Указатель на первый блок
}

Теперь надо будет обьявить пару функций
1. Запихни в стек
2. Вытащи из стека
+ дополнит. функции
1. Верни свободный блок из кучи
2. Возвтрати блок в кучу.
3. Верни адрес предпоследнего блока в списке.
Ты так хотел делать?
 
Текущее время: 11:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru