Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Вопросы начинающих программистов
Перезагрузить страницу Помогите с линейным списком(((
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Alerr Alerr вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.09.2011
Unhappy Помогите с линейным списком((( - 02.09.2011, 19:16

Люди, читал сегодня целый день про эти списки, но так и не понял что и как((( Я понял, что при работе со списком есть свои особенности... Но об этом спрошу позже если появятся вопросы...
Дело в том, что я никак не могу понять, как создать линейный список, причем тут структура??? Структура это звено списка, а их обьединение-список?? В голове уже каша??? Помогите, кто может,последовательно во всем разобраться...
Ответить с цитированием
  (#2 (permalink)) Старый
Odin_KG Odin_KG вне форума
Member
 
Сообщений: 956
Сказал(а) спасибо: 0
Поблагодарили 17 раз(а) в 16 сообщениях
Регистрация: 28.01.2007
По умолчанию 04.09.2011, 23:07

Я с научной точкой зрения не очень знаком, но списком может быть обычный одномерный массив. А можно создать под каждый элемент списка структуру, чтобы она ссылалась на следующий и предыдущий элемент, тогда можно будет перемещаться по списку туда-сюда. Вы лучше скажите, чего вы хотите сделать, а то непонятно в чем проблема? Делать список ради списка как-то бессмысленно.
Ответить с цитированием
  (#3 (permalink)) Старый
alexu alexu вне форума
Member
 
Сообщений: 433
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 4 сообщениях
Регистрация: 01.06.2007
По умолчанию 07.09.2011, 11:08

Место под массив выделяется фиксированное при написании программы, например

cpp Код:
AnsiString massiv[1000];

При этом вы получаете место, куда можно записать 1000 строчек от 0 до 999. Работать с массивом легко и приятно, захотели записать что-то в 500-ю строчку - так и пишем:

cpp Код:
massiv[499] = "Вася Пупкин";

Проблемы начнутся тогда, когда число ваших записей превысит 1000, попытка записать

cpp Код:
massiv[1000] = "Вася Пупкин";

ни к чему хорошему не приведёт, или к выдаче сообщения об ошибке, или к краху программы, или к неверным действиям программы, если она всё же не крякнет.

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

Ну и работа со списком отличается от работы с массивом. Так, к любому элементу списка нельзя обратиться в произвольном порядке, а только последовательно перебирая элементы от начала к концу. Но зато можно легко добавлять записи в середину списка, что затруднительно в массиве. Так понятно?
Ответить с цитированием
  (#4 (permalink)) Старый
alexu alexu вне форума
Member
 
Сообщений: 433
Сказал(а) спасибо: 0
Поблагодарили 4 раз(а) в 4 сообщениях
Регистрация: 01.06.2007
По умолчанию 07.09.2011, 11:59

Вот текст простенькой демонстрационной программы на С++ builder, которая создаёт список, добавляет элементы к списку при нажатии кнопки 1, выводит на экран при нажатии кн.2, удаляет список, очищает память и закрывает прогу при нажатии кн.3:

cpp Код:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "ssp.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;


//связанный список
class NDSet
  {
  public:
  NDSet* pNext;
  AnsiString Str;
  };

//указатель на первый элемент списка
NDSet* pHead = 0;






//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------




// добавление объекта в начало списка
void __fastcall TForm1::Button1Click(TObject *Sender)
{

static int X = 10;


  //создаем новый объект для заполнения
  NDSet* pNDS = new NDSet;

  //записываем в объект данные ( цифры от 10 до ...)
  pNDS->Str = IntToStr(X++);

  Label1->Caption = pNDS->Str;


  // добавляем элемент в список
  pNDS -> pNext = pHead;
  pHead = pNDS;



return;        
}
//---------------------------------------------------------------------------




// поочередно выводим все элементы списка на экран
void __fastcall TForm1::Button2Click(TObject *Sender)
{

  AnsiString S;

  NDSet* pNDS = pHead;

  Button2->Enabled = false;

  while( pNDS != NULL )
    {
    //вывод на экран
    S += pNDS->Str + " ";

    Label2->Caption = S;
    Application->ProcessMessages();


    //получим адрес следующего элемента
    pNDS = pNDS->pNext;

    //задержка, чтобы видеть как работает программа
    Sleep(400);
    }

  Button2->Enabled = true;

return;        
}
//---------------------------------------------------------------------------





//удаляем всё
void __fastcall TForm1::Button3Click(TObject *Sender)
{

  while( pHead != NULL )
    {
    NDSet* pNDS = pHead;
    pHead = pHead->pNext;

    delete pNDS;
    }

   
Form1 -> Close();

return;
}
//---------------------------------------------------------------------------
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с циклическим однонаправленном списком в С++ Karina2 С/С++ 0 26.05.2011 21:07
помогите решить задачу со списком? tit-stas Prolog 3 05.05.2011 20:44
Проблема с линейным выходом ackles Звук и акустические системы 1 28.04.2011 14:24
а помоигте с со списком драйверов Саня -911 Любые вопросы от новичков 12 28.10.2010 13:35
помогите пожалуйста со списком Latika Prolog 2 30.04.2010 12:05
HELP! Задача на ПРОЛОГе со списком KleoYY Prolog 6 10.12.2009 18:59
Задача со списком на Прологе!HELP! _Melissa_ Prolog 2 09.12.2009 14:36
помогите пожалуйста со списком! salavat Prolog 2 23.06.2008 22:57
Задача со списком sublist на SWI taron13 Prolog 3 09.06.2008 22:05
Работа со списком almost_famous Prolog 5 30.04.2008 21:16
Проблема со списком!!! SiJey Prolog 1 16.01.2006 21:16
Как правильно работать с двунаправленным списком Pinok Pascal 1 30.10.2004 01:12



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов