21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,058
|
||||||
1 | ||||||
Алгоритм Хаффмана. Поле текущего элемента структуры изменяется уже после перехода на следующий23.12.2019, 20:42. Показов 853. Ответов 9
Метки нет (Все метки)
Для примера ввёл слово "слово", функция составления дерева сработала идеально, и выдала это. Однако функция MakeTable работает как-то не так, она создаёт таблицу
Л – 11 В – 11 С – 10 О – 0 А должна: Л – 111 В – 110 С – 10 О – 0 При просмотре откладке я обнаружил странную вещь – после дохода до (tr->val != 0), в Л ложится код 111, однако после создания следующего столбца таблицы (table* New = new table;) и перехода к нему (tb = tb->next;), после удаления последнего символа из кода, новый код каким-то образом привязывается к Л и только потом отлипает. Почему так получается?
0
|
23.12.2019, 20:42 | |
Ответы с готовыми решениями:
9
Алгоритм Хаффмана, реализация через структуры Изъять из списка L после каждого вхождения элемента E1 следующий элемент Добавить поле из элемента управления в word файл с уже имеющейся инфой Не могу придумать алгоритм как сделать чтоб при нажатии на кнопку в поле едит (уже выведенному в нем числу)добавлялась е |
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,058
|
|
01.01.2020, 16:16 [ТС] | 2 |
вопрос ещё актуален
0
|
85 / 34 / 20
Регистрация: 15.12.2019
Сообщений: 88
|
|
01.01.2020, 16:47 | 3 |
Мб, названия библиотек напишите, а то даже и не знаю как это проверять в ide.
0
|
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,058
|
|
01.01.2020, 18:52 [ТС] | 4 |
В данном кусочке кода не используются никаких библиотек. Я могу скинуть весь код, если нужно
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
01.01.2020, 19:49 | 5 |
Если я правильно понял, у тебя используется один и тот же список для хранения кодов разных символов. Т.е. разные символы у тебя ссылаются на один и тот же список (или части этого списка). Соответственно, редактирование кода одного символа может неожиданно поменять код другого.
Первым делом перепиши свой код так, чтобы не было глобальных переменных start и firsT . Именно с их помощью ты в своем коде творишь какую-то фигню. Во вторых, копируй весь список с кодом, а не только его первый элемент (это я про твой tb->code = *start; ).
0
|
199 / 155 / 45
Регистрация: 11.11.2019
Сообщений: 348
|
|
01.01.2020, 20:12 | 6 |
Строка 33 выделяете память и тут же обнуляете указатель
0
|
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,058
|
|
01.01.2020, 20:17 [ТС] | 7 |
nonedark2008,
tb->code = *start; – это и есть копирование всего списка с кодом: *start указывает на первый элемент, у первого элемента храниться указатель на следующий и тдstruct table { – у каждого table есть свой binary. Если бы разные таблицы ссылались на один и тот же список, в выводе у меня бы всем символам показывался один и тот же код, но это не так unsigned char letter;
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
01.01.2020, 21:12 | 8 |
Ты ошибаешься. В твоем примере
tb->code->next и start->next будут указывать на один и тот же элемент списка. Если ты в этом элементе что-либо поменяешь, то он изменится и для start->next , и для tb->code->next . Так что тут нет никакого копирования всего списка.Ну и как бонус: в твоем примере tb->code->next->perv будет указывать не на tb->code , а на start .Добавлено через 7 минут Я и не говорю, что они ссылаются на один и тот же список. Я говорю, что твои списки местами ссылаются на одни и те же элементы.
0
|
21 / 21 / 3
Регистрация: 24.05.2014
Сообщений: 1,058
|
|
02.01.2020, 11:34 [ТС] | 9 |
nonedark2008,
Ну так и есть, start же указывает на начало списка
Очень странно, почему для "о" и "в" код правильный, а для "с" и "л" – нет. И раз уж tb->code->perv (на этапе, когда tr->val указывает на родителя "в", после удаления "л") прилипает к start, почему он отлипает от него после выполнения add(binary*& b, bool o) ? Там на данном этапе b!=0 и, следовательно, со start ничего не происходит
0
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
02.01.2020, 12:20 | 10 |
Ну вот и получаешь то, что получаешь.
Вычислил ты код: code->1-1-1 Сохранил его для 'л'. Получил следующее: Код
code->1-1-1 / 'Л' ->1 Код
'В' ->1 \ code->1-1-0 / 'Л' ->1 Добавлено через 3 минуты Потому что твое дерево слишком примитивное, а твой алгоритм не портит ранее сохраненные коды длины 2.
1
|
02.01.2020, 12:20 | |
02.01.2020, 12:20 | |
Помогаю со студенческими работами здесь
10
Создание кнопки для перехода на следующий монтажный кадр Как мне сделать чтобы после нахождения первого минимального элемента (напр mas[2;4]=4) следующий элемент начинал искаться с 4 строки ? Не изменяется IP домена уже 5 дней Постройте алгоритм и составьте программу, по которой будет реализован следующий сценарий:компьютер запрашивает номер дня недели, после ввода компьютер Элементы структуры: неправильное значение после 10 элемента На основе уже имеющегося списка создать новый, вставляя заданный элемент после каждого i-го элемента Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |