Кольцевой список

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ediToR
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 23.12.2003 (Вт) 6:49

Кольцевой список

Сообщение ediToR » 23.12.2003 (Вт) 7:08

Hi All. Надо организовать стуктуру данных в виде однонаправленного кольцевого списка. На С я делал так:
Код: Выделить всё
class student
{
public :
  void mainmenu(void);
  void input(void);                  //функции для работы со списком
    ....                                   // другие функции

private :

  struct stud
{
   int NUM;           

   char name[20];     //имя
   char fam[20];       //фамилия
   ....                       // и т.д...
   
   struct stud *next;

}*node,*begin,*ptr,*pr;

   int num;           //Кол-во элементов
};
int number=0;

Надо сделать тоже самое на VB. На сколько я понял в ВБ нет указателей на стуктуры и т.д. Вот я и хочу узнать как всё это хозяйство можно организовать. Также меня интересует навигация по списку: встать на начало, на конец, на заданный элемент списка. И желательно какую-нить функцию для примера (добавление\удаление - не важно). Заранее благодарен всем ответившим.

Tin
Woodsman
Woodsman
Аватара пользователя
 
Сообщения: 1001
Зарегистрирован: 08.12.2001 (Сб) 11:00
Откуда: Kazakhstan

Сообщение Tin » 23.12.2003 (Вт) 11:23

Драсьте...

Как я понял ты хочешь разобраться с Объектом List?

У листов (БЕЗ БУКВЫ Г :lol: ) есть такое свойство как ListIndex (к примеру List1.ListIndex) - оно возвращает порядковый номер той записи которая выделина. Если запись не выделена - то возвращается -1 (минус). Вот и весь секрет
Если:
При нажатии на элемент списка ты хочешь в текст бокс всавить то что написано на выделеном элименте, Тада
1. нажимаем два раза на список (шутка :D )
2. в сабах мы види

Private Sub List1_click()
text1.text=list1.list(listindex)
End Sub

ДругоеЕсли:
Ты хочешь сделать что-то вроде скролинга (в примере Кнопочка) при работе с которым в списке должен бегать бегунок

Private Sub Command1_click()
Static I as integer
I=I+1
if i>list1.listcount then I=0 'Вот тебе и замкнутый список
List1.Listindex=i
End Sub

Если другое
Уточни вопрос

Конец Если
888888__88__88____88
__88________8888__88
__88____88__88__8888
__88____88__88____88

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 23.12.2003 (Вт) 13:11

А зачем именно список? Совсем не обязательно один в один переносить программы с другого языка. В C списки удобны, в VB - нет. Может массива было бы достаточно? Кроме того в VB есть замечательный объект Collection.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 23.12.2003 (Вт) 15:00

Это точно, со списками в VB тяжко. Если уж позарез, то используй типы и массивы
Код: Выделить всё
Type MyList
  bUsed As Boolean 'вспомогательное поле, сильно упрощает нахождение свободного элемента на поле
  pNext As Long 'указатель на следующий элемент
  sName As String
  sFam As String
  ...
End Type
Private lst(0 to 1000) As List


Как-то я делал класс для работы со списками, там было добавление, удаление, изменение, поиск, дефрагментация, перемещение элемента внутри списка... Много чего было, один "товарисч" грозился поставить несколько зеленых президентов, но получил класс и был таков :)

Но лучше послушай Идеолога :) и используй коллекции.
Lasciate ogni speranza, voi ch'entrate.

ediToR
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 23.12.2003 (Вт) 6:49

Сообщение ediToR » 23.12.2003 (Вт) 15:13

Уточняю вопрос. Мне надо именно класс создать. Получится некая примитивная БД. Я на форме ввожу данные, они записываются в соотв. переменные класса т.е создаётся элемент списка, потом следующий и т.д. Последний должен указывать на первый элемент т.к список кольцевой. Но в VB я не вижу никаких указателей на структуры... Вот я и спрашиваю: если создам свой класс, где мне и как создать указатели на мою структуру? Грубо говоря, надо тоже самое что на С я написал сделать на VB.[/code]

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 23.12.2003 (Вт) 19:14

Переменная типа Object или конкретно твоего класса.

Пример. Пишу на лету, потому могут быть ошибилки.
Class MyNode
Код: Выделить всё
Public id As Long
Public Name As String
...
Public NextNode As MyNode
Public PrevNode As MyNode
Public FirstNode As MyNode


А примерно так будет выглядеть добавление следующего элемента в коллекцию
Код: Выделить всё
Public MyNodes As New Collection

Public Function Add(ByVal id As Long, ByVal Name As String)

Dim Node As MyNode

With Node
    .id = id
    .Name = Name
    Set .NextNode = Nothing
    If (Nodes.Count = 0) Then
        Set .FirstNode = Node
        Set .PrevNode = Nothing
    Else
        Set .FirstNode = Nodes(1)
        Set .PrevNode = Nodes(Nodes.Count)
        Set .PrevNode.NextNode = Node
    End If
End With

Nodes.Add Node

Set Add = Node
Set Node = Nothing

End Function

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 23.12.2003 (Вт) 19:17

skiperski тебе бы статьи писать :).
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 25.12.2003 (Чт) 21:16

Ну, и как это назывется? Прибежал, схватил, убежал. Как в том анекдоте: ни мне "здрасти", ни жене "спасибо". Ну неужели так тяжело доложиться об исполнении?

ediToR
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 23.12.2003 (Вт) 6:49

Сообщение ediToR » 26.12.2003 (Пт) 2:41

skiperski писал(а):Ну, и как это назывется? Прибежал, схватил, убежал. Как в том анекдоте: ни мне "здрасти", ни жене "спасибо". Ну неужели так тяжело доложиться об исполнении?


2 skiperski: Псиба тебе огромное. Пробую реализовать выше изложенное на ВБ.НЕТ. Только не через коллекцию, а с помощью знакомого мне объявления
Код: Выделить всё
Public Class My_Class
...
....
End Class

т.к в этой версии ВБ более похожий для меня синтаксис к СИ. Только скажи мне плиз, ты в примере приводил функцию в Классе или уже в модуле формы его писал? Я так-то идею понял, но есть ещё вопросы кое-какие... В ВБ_6 это вроде работает, а вот в ВБ.НЕТ есть непонятные вещи, т.к написанно не через коллекцию..

skiperski
Идеолог
Идеолог
Аватара пользователя
 
Сообщения: 1386
Зарегистрирован: 25.06.2002 (Вт) 15:52

Сообщение skiperski » 26.12.2003 (Пт) 19:33

ediToR писал(а):Псиба тебе огромное.

На здоровье

ediToR писал(а):Пробую реализовать выше изложенное на ВБ.НЕТ.

С NET я не работал, но коллекции там тоже должны быть. Я надеюсь. :D

ediToR писал(а):Только скажи мне плиз, ты в примере приводил функцию в Классе или уже в модуле формы его писал?

Это без разницы, можно так, можно по другому. Есть несколько уже ставших привычными моделей и надо просто выбрать какой из типов тебе ближе в понимании. Для меня удобнее выделить два класса, один, собственно, класс-данных, другой класс-контейнер для навигации по по классам-данных. Класс-контейнер внутри манипулирует коллекцией, массивом или ещё чем-либо, а наружу предоставляет стандартый интерфас: Add, Delete/Remove, Item...
Возьми тот же XML или HTML объекты и посмотри на их внешнее устройство.

Rainbow
Человек-радуга
Человек-радуга
 
Сообщения: 543
Зарегистрирован: 13.05.2003 (Вт) 14:16

Сообщение Rainbow » 26.12.2003 (Пт) 20:04

skiperski писал(а):С NET я не работал, но коллекции там тоже должны быть. Я надеюсь. :D

Когда я смотрела на .NET (это было очень давно - Beta1 :) ) Сollection там не было. Но был вполне заменяющий тип - Hashtable


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList