Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

 

  Вопрос: Дв. списки(Дерево) Добавлено: 31.05.08 09:34  

Автор вопроса:  true
Долго искал по форуму и интернету, но толком ничего не нашел. Поэтому решил написать здесь в надежде получить помощь. Суть задачи состоит в том, чтобы вывести двусвзный список в виде дерева, желательно в msgbox. Все это реализуется в Excel. Я написал процедуру добавления элементов к дереву, а вывести не могу. Дерево изначально упорядоченное. Помогите написать вывод дерева в msgbox.

Описание дерева и ссылок в Class Module (List2)

Option Explicit
Public value As Integer
Public right As list2
Public left As list2
Public count As Integer

Ну и само добавление в Module. Значения берутся из первого столбца.

Sub main()
 Dim l2 As list2
 n = 0
 Call ReadTree(l2)
 End Sub

Sub ReadTree(l2 As list2)
 Dim i, new_value As Integer
 i = 1
 Do While Excel.Cells(i, 1) <> ""
  new_value = CInt(Excel.Cells(i, 1))
  Call AddTree(l2, new_value)
  i = i + 1
 Loop
End Sub

Sub AddTree(l2 As list2, new_value As Integer)
Dim p As list2
Dim new_list As New list2
Dim search As Boolean
Set p = l2
new_list.value = new_value
new_list.count = 1
search = True
    Do While search
      If l2 Is Nothing Then
        search = False
        Set l2 = new_list
       n=n+1
   ElseIf new_value < p.value Then
      If p.left Is Nothing Then
         Set p.left = new_list
         search = False
         n=n+1
      Else
         Set p = p.left
      End If
   ElseIf new_value > p.value Then
      If p.right Is Nothing Then
         Set p.right = new_list
         search = False
         n=n+1
      Else
         Set p = p.right
      End If
      ElseIf new_value = p.value Then
      p.count = p.count + 1
      n=n+1
      search = False
   End If
   Loop
End Sub

Ответить

  Ответы Всего ответов: 77  

Номер ответа: 1
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #1 Добавлено: 04.06.08 12:28
Мда, изжили себя гении...Чтож, придется самому думать.

Ответить

Номер ответа: 2
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #2 Добавлено: 04.06.08 12:57
Гений дремлет :)

Пройди рекурсией по дереву накапливая строку.

Каждое вход в процедуру увеличивает отступа перед именем элемента ветки, каждый выход сокращает.
Каждый элемент на новой строке.

Ответить

Номер ответа: 3
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #3 Добавлено: 04.06.08 13:02
Опечаток налепил как первоклашка, аж две на строку.
Блин пора просыпаться, обед уходит безвозвратно :)
Сори за оффтоп.

Ответить

Номер ответа: 4
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #4 Добавлено: 04.06.08 13:13
Саму логику то я понимаю, просто с рекурсией плохо у меня. Я матрицей делал и у меня получилось дерево какое нужно было, только вот преподу не понравилось, сказал переделать. И вот я уже почти месяц сижу и думаю, как бы сделать.

Ответить

Номер ответа: 5
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #5 Добавлено: 04.06.08 19:39
Напишите хотя бы примерно эту рекурсию, а я как нить переделаю для себя, а то я на счет пробелов не понимаю и как построчно разбить можно.

Ответить

Номер ответа: 6
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #6 Добавлено: 04.06.08 20:14
Шли свой документ на maxpotas@mail.ru
Посмотрю, может что пойму, а может и сделаю что-нибудь.

Рекурсия это не формула, чтоб её рас так и написать.

Ну, напишу я рекурсивный перебор коллекции папок в FSO, как ты его потом переделывать будешь, ничего не понимая?

Ответить

Номер ответа: 7
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #7 Добавлено: 05.06.08 05:24
Все, я отправил.

Ответить

Номер ответа: 8
Автор ответа:
 Smith



ICQ: adamis@list.ru 

Вопросов: 153
Ответов: 3632
 Профиль | | #8 Добавлено: 06.06.08 20:50
Проверка связи.

Гений проснулся и написал рекурсию.

С созданием строки тоже разберемся.

Ответить

Номер ответа: 9
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #9 Добавлено: 06.06.08 22:23
Связь отменна!:) Эт хорошо что гении не дремлют!:)

Ответить

Номер ответа: 10
Автор ответа:
 Smith



ICQ: ненавижу 

Вопросов: 28
Ответов: 317
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #10
Добавлено: 06.06.08 22:30
Почту смотрел?

Ответить

Номер ответа: 11
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #11 Добавлено: 06.06.08 22:33
Ага!:) Буду ждать!:) ну и сам че подумаю, может что в голову придет интересное!:) Почему, книжка вроде нормальная, только не для двусвязных списков, вот односвязные там разжеваны, что даже ребенок поймет, по ней я и реализовал первую задачу из общих на односвязные списки.

Ответить

Номер ответа: 12
Автор ответа:
 Smith



ICQ: ненавижу 

Вопросов: 28
Ответов: 317
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #12
Добавлено: 06.06.08 22:46
Слушай тебе обязательно эти списки нужны?

Ответить

Номер ответа: 13
Автор ответа:
 Smith



ICQ: ненавижу 

Вопросов: 28
Ответов: 317
 Web-сайт: Не хочу ломать голову, если её уже сломал кто-то другой.
 Профиль | | #13
Добавлено: 06.06.08 22:48
Я такое забубенное дерево замутил, что по сравнению с ним никакие списки вообще не котируют :)

Ответить

Номер ответа: 14
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #14 Добавлено: 06.06.08 22:50
Ну вообще это и есть суть задания. Создать упорядоченное дерево, подсчитать кол-во вхождений определенного элемента, вывести по возростанию, ну и самое главное это вывести его по вершинам, то есть само дерево как оно есть! а что, не получается что то?

Ответить

Номер ответа: 15
Автор ответа:
 true



Вопросов: 1
Ответов: 38
 Профиль | | #15 Добавлено: 06.06.08 22:52
Создание упорядоченного дерева, я привел в самом первом посте. Интересно было бы посмотреть на них!:)

Ответить

Страница: 1 | 2 | 3 | 4 | 5 | 6 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам