Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/74: Рейтинг темы: голосов - 74, средняя оценка - 4.76
0 / 0 / 1
Регистрация: 11.05.2011
Сообщений: 56

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

11.11.2011, 10:19. Показов 14447. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите сформировать односвязный список, добавление элемента после текущего и выведение этого на экран. И перемещение по списку с помощью клавишь стрелок( или других). Помогите хотябы с некоторыми процедурами) Заранее благодарна)

Добавлено через 9 часов 44 минуты
Хелп ми
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.11.2011, 10:19
Ответы с готовыми решениями:

Кольцевой двунаправленный список
Пусть L обозначает кольцевой двунаправленный список с заглавным звеном. Используя функцию или процедуру, из списка L, содержащего не менее...

двусвязный кольцевой список
нужно написать следующие процедуры: -перемещение по списку(стрелки) -включение нового узла(Ins) -Исключение узла(del) -очистка...

Текст заканчивающийся точкой занести в динамический кольцевой список.
Текст заканчивающийся точкой занести в динамический кольцевой список. вывести на экран монитора текст из кольцевого списка n раз, n ввести...

15
59 / 59 / 52
Регистрация: 19.11.2010
Сообщений: 218
11.11.2011, 15:15
А ты уверена,что тебе нужен именно кольцевой?
Предлагаю свой вариант некольцевого односвязного списка.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
Program Spis;
Uses crt;
Type Pint=^intr;
     intr=record
       a:integer;
       next:Pint;
     end;
Procedure NtCreat(Var Hed:Pint);  //процедура создания элемента списка
Var C,B:Pint;
    a:integer;
begin
  New(C);
  Write('Введите а ');
  readLn(C^.a);
  if hed=nil then
    begin
      hed:=c;
      hed^.next:=nil;  //если кольцевой,то сюда вставляй адрес "головы"
    end      else
    begin
      b:=hed;
      while b^.next<>nil do
        b:=b^.next;
      c^.next:=nil;
      b^.next:=c;
    end;
end;
 
Procedure View(Var Hed:Pint);  // процедура просмотра всего списка
Var C:Pint;
begin
  c:=Hed;     //Встали на "голову"
  if c=nil then
  begin
   WriteLn('Список пуст! ');
   readLn;
   exit;
  end;
  While c<>nil  do  //пока не дошли до конца
  begin
    WriteLn(C^.a);  // читаем элемент списка
    Write('Далее ');
    readLn;     //Жмём Enter
    c:=C^.next;  //Движение по списку
  end;
  WriteLn('Конец списка! ');
  readLn;
end;
 
Function Show(Var Sp:pint):boolean;
Var i:char;
begin
  Show:=true;
  WriteLn('1- Создать элемент списка ');
  Writeln('2- Просмотреть весь список ');
  WriteLn('3- Выход ');
  i:=readkey;
  case i of
    '1':NtCreat(Sp);
    '2':View(sp);
    '3':Show:=false;
  end;
end;
Var Spisok:Pint;
    F:boolean;
Begin
  ClrScr;
  Spisok:=nil;
  repeat
    f:=show(Spisok);
    clrscr;
  until not F;
end.
2
0 / 0 / 1
Регистрация: 11.05.2011
Сообщений: 56
11.11.2011, 20:29  [ТС]
Да именно кольцевой мне нужен) связь должна быть между последним и первым элементом

Добавлено через 2 часа 4 минуты
Мальчики помогите пожалуйста оч надо...
0
59 / 59 / 52
Регистрация: 19.11.2010
Сообщений: 218
12.11.2011, 07:07
Ну тогда вот:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Program Spis;
Uses crt;
Type Pint=^intr;
     intr=record
       a:integer;
       next:Pint;
     end;
Procedure NtCreat(Var Hed:Pint);  //процедура создания элемента списка
Var C,B:Pint;
    a:integer;
begin
  New(C);
  Write('Введите а ');
  readLn(C^.a);
  if hed=nil then
    begin
      hed:=c;
      hed^.next:=Hed;  //так как список кольцевой,то сюда вставляем адрес "головы"
    end      else
    begin
      b:=hed;
      while b^.next<>hed do
        b:=b^.next;
      c^.next:=Hed;
      b^.next:=c;
    end;
end;
 
Procedure View(Var Hed:Pint);  // процедура просмотра всего списка
Var C:Pint;
begin
  c:=Hed;     //Встали на первый элемент списка
  if c=nil then
  begin
   WriteLn('Список пуст! ');
   readLn;
   exit;
  end;
 repeat
    WriteLn(C^.a);  // читаем элементы списка до тех пор,пока не перейдём на начало
    Write('Далее ');
    readLn;     //Жмём Enter
    c:=C^.next;  //Движение по списку
 until C=hed;
  WriteLn('Конец списка!Опять голова! ');  //с последнего элемента перешли на первый)))
  readLn;
end;
 
Function Show(Var Sp:pint):boolean;
Var i:char;
begin
  Show:=true;
  WriteLn('1- Создать элемент списка ');
  Writeln('2- Просмотреть весь список ');
  WriteLn('3- Выход ');
  i:=readkey;
  case i of
    '1':NtCreat(Sp);
    '2':View(sp);
    '3':Show:=false;
  end;
end;
Var Spisok:Pint;
    F:boolean;
Begin
  ClrScr;
  Spisok:=nil;
  repeat
    f:=show(Spisok);
    clrscr;
  until not F;
end.
2
0 / 0 / 1
Регистрация: 11.05.2011
Сообщений: 56
12.11.2011, 21:36  [ТС]
надо чтоб у програмки был вид
нажмешь 1-переход к след элементу
2 к пред элементу
3 добавление элемента....
0
0 / 0 / 1
Регистрация: 11.05.2011
Сообщений: 56
14.11.2011, 16:37  [ТС]
Помогите(((((

Добавлено через 7 часов 23 минуты
за качественно сделанную програмку заплачу деньги...
0
59 / 59 / 52
Регистрация: 19.11.2010
Сообщений: 218
14.11.2011, 17:37
Цитата Сообщение от sigar Посмотреть сообщение
нажмешь 1-переход к след элементу
2 к пред элементу
Ну тогда по-любому список должен быть двусвязный)))

Добавлено через 3 минуты
Ну хотя и односвязный можно!
1
0 / 0 / 1
Регистрация: 11.05.2011
Сообщений: 56
14.11.2011, 17:41  [ТС]
односвязный) есть процедуры у меня но не получается вывести элемент на экран просто...
Pascal
1
2
3
4
5
6
7
8
9
10
11
procedure prev(l:circlelink);
var buf:circlelink;
begin
  if l<>nil then
  begin
    buf:=l;
    while buf^.link<>l do
      buf:=buf^.link;
    l:=buf
  end
end;
вот переход к предыдущему

Добавлено через 2 минуты
Цитата Сообщение от Artorios Посмотреть сообщение
Ну тогда по-любому список должен быть двусвязный)))

Добавлено через 3 минуты
Ну хотя и односвязный можно!
Тогда помоги)))) пожалуйста))
 Комментарий модератора 
Теги кода добавлены модератором. По правилам форума, код должен быть оформлен соответствующими тегами. Для оформления кода Pascal следует выделить этот код и на панели редактирования сообщения нажать кнопку: "PASCAL".
0
59 / 59 / 52
Регистрация: 19.11.2010
Сообщений: 218
14.11.2011, 18:34
Хорошо!Вот так?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
Program Spis;
Uses crt;
Type Pint=^intr;
     intr=record
       a:integer;
       next:Pint;
     end;
Procedure NtCreat(Var Hed:Pint);  //процедура создания элемента списка
Var C,B:Pint;
    a:integer;
begin
  New(C);
  Write('Введите а ');
  readLn(C^.a);
  if hed=nil then
    begin
      hed:=c;
      hed^.next:=Hed;  //так как список кольцевой,то сюда вставляем адрес "головы"
    end      else
    begin
      b:=hed;
      while b^.next<>hed do
        b:=b^.next;
      c^.next:=Hed;
      b^.next:=c;
    end;
end;
 
Procedure View(Var Hed:Pint);  // процедура просмотра всего списка
Var C,S:Pint;
    i:integer;
begin
  c:=Hed;     //Встали на первый элемент списка
  S:=nil;
  if c=nil then
  begin
   WriteLn('Список пуст! ');
   readLn;
   exit;
  end;
 repeat
    WriteLn(C^.a);  // читаем элементы списка до тех пор,пока не перейдём на начало
    Write('1-Далее 0-Назад 2-Закончить просмотр ');
    readLn(i);     //Жмём Enter
    case i of
    1:c:=C^.next;  //Движение по списку вперёд
    0:begin
        s:=C;
        c:=hed;
         While C^.next<>s do
           c:=c^.next;
      end;
    2:begin
        break;
        exit;
      end;
    end;
 until false;//C=hed;
end;
 
Function Show(Var Sp:pint):boolean;
Var i:char;
begin
  Show:=true;
  WriteLn('1- Создать элемент списка ');
  Writeln('2- Просмотреть весь список ');
  WriteLn('3- Выход ');
  //i:=readkey;
  readLn(i);
  case i of
    '1':NtCreat(Sp);
    '2':View(sp);
    '3':Show:=false;
  end;
end;
Var Spisok:Pint;
    F:boolean;
Begin
  ClrScr;
  Spisok:=nil;
  repeat
    f:=show(Spisok);
    clrscr;
  until not F;
end.
1
0 / 0 / 1
Регистрация: 11.05.2011
Сообщений: 56
15.11.2011, 00:16  [ТС]
помогите еще сделать удаление элемента наиболее удаленного от текущего)))

Добавлено через 3 часа 3 минуты
сделала нахождение наиболее удаленного элемента) но как его удалить)

Добавлено через 54 минуты
Pascal
1
2
3
4
5
6
7
8
9
10
11
   
 '3':begin
        dkol:=kol div 2;//кол-во элементов в списке
        for j:=1 to dkol do c:=C^.next;
        sav:=c;
        if (c^.next = c) then //если в списке 1 элемент
           begin
                dispose(c);
                hed:=nil;
                exit;
           end;
0
59 / 59 / 52
Регистрация: 19.11.2010
Сообщений: 218
15.11.2011, 15:44
Вот так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
Program Spis;
Uses crt;
Type Pint=^intr;
     intr=record
       a:integer;
       next:Pint;
     end;
Procedure NtCreat(Var Hed:Pint);  //ïðîöåäóðà ñîçäàíèÿ ýëåìåíòà ñïèñêà
Var C,B:Pint;
    a:integer;
begin
  New(C);
  Write('Ââåäèòå à ');
  readLn(C^.a);
  if hed=nil then
    begin
      hed:=c;
      hed^.next:=Hed;  //òàê êàê ñïèñîê êîëüöåâîé,òî ñþäà âñòàâëÿåì àäðåñ "ãîëîâû"
    end      else
    begin
      b:=hed;
      while b^.next<>hed do
        b:=b^.next;
      c^.next:=Hed;
      b^.next:=c;
    end;
end;
 
Function GetKol(hed:Pint):integer;   //Функция возвращает кол-во элементов в списке
Var C:Pint;
    i,kol:integer;
begin
   c:=hed;
   kol:=0;
   repeat
     c:=c^.next;
     inc(kol);
   until c=hed;
   GetKol:=Kol;
end;
 
Procedure View(Var Hed:Pint);  
Var C,S,sav:Pint;
    i,j,n:integer;
begin
  c:=Hed;     //Âñòàëè íà ïåðâûé ýëåìåíò ñïèñêà
  S:=nil;
  if c=nil then
  begin
   WriteLn('Ñïèñîê ïóñò! ');
   readLn;
   exit;
  end;
 repeat
    WriteLn(C^.a);
    Write('1-Äàëåå 0-Íàçàä 2-Çàêîí÷èòü ïðîñìîòð 3-óäàëèòü íàèáîëåå óä. ');
    readLn(i);     //Æì¸ì Enter
    case i of
    1:c:=C^.next;  //Äâèæåíèå ïî ñïèñêó âïåð¸ä
    0:begin
        s:=C;
         While C^.next<>s do
           c:=c^.next;
      end;
    2:begin
        break;
        exit;
      end;
    3:begin
        if c^.next<>c then
        begin
         n:=GetKol(hed) div 2;
         for j:=1 to n do
           c:=c^.next;
         c^.next:=c^.next^.next;
        end  else
        WriteLn('Ýòî ïîñëåäíèé ýëåìåíò');
      end;
    end;
 until false;//C=hed;
end;
 
Function Show(Var Sp:pint):boolean;
Var i:char;
begin
  Show:=true;
  WriteLn('1- Ñîçäàòü ýëåìåíò ñïèñêà ');
  Writeln('2- Ïðîñìîòðåòü âåñü ñïèñîê ');
  WriteLn('3- Âûõîä ');
  //i:=readkey;
  readLn(i);
  case i of
    '1':NtCreat(Sp);
    '2':View(sp);
    '3':Show:=false;
  end;
end;
Var Spisok:Pint;
    F:boolean;
Begin
  ClrScr;
  Spisok:=nil;
  repeat
    f:=show(Spisok);
    clrscr;
  until not F;
end.
1
0 / 0 / 1
Регистрация: 11.05.2011
Сообщений: 56
15.11.2011, 20:41  [ТС]
Вы маленько не так поняли какой элемент наиболее удаленный)) Вы рассмотрели список как линейный а не кольцевой) Но я переделаю как нужно)
0
59 / 59 / 52
Регистрация: 19.11.2010
Сообщений: 218
16.11.2011, 07:04
Цитата Сообщение от sigar Посмотреть сообщение
Вы рассмотрели список как линейный а не кольцевой)
Этож почему как линейный?Вроде как так надо было делать:
Цитата Сообщение от sigar Посмотреть сообщение
dkol:=kol div 2;//кол-во элементов в списке
for j:=1 to dkol do c:=C^.next; //дошли до нужного элемента
работаем с ним
А тут тоже самое:
Pascal
1
2
3
4
n:=GetKol(hed) div 2;  //dkol:=kol div 2;тоже самое
for j:=1 to n do         //for j:=1 to dkol do
  c:=c^.next;          //дошли до нужного элемента
c^.next:=c^.next^.next;//работаем с ним
0
0 / 0 / 1
Регистрация: 11.05.2011
Сообщений: 56
16.11.2011, 10:23  [ТС]
WriteLn('Это последний элемент');

такого в кольцевом списке не может быть)) там нет первого и последнего элемента) это замкнутое кольцо
0
59 / 59 / 52
Регистрация: 19.11.2010
Сообщений: 218
16.11.2011, 10:41
Это в смысле остался последний элемент.
0
0 / 0 / 1
Регистрация: 11.05.2011
Сообщений: 56
16.11.2011, 18:52  [ТС]
Все прога сдана) Всем спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.11.2011, 18:52
Помогаю со студенческими работами здесь

Кольцевой двунаправленный список: удалить все элементы, у которых одинаковые соседи
Дан кольцевой двунаправленный список. Из списка L удалить все элементы у которых одинаковые соседи (первый и последний элемент считать...

Разработать алгоритм и программу решения задачи, в которой сформировать кольцевой односвязный список.
Разработать алгоритм и программу решения задачи, в которой сформировать кольцевой односвязный список.

Сформировать однонаправленный кольцевой список и провести удвоение буквы "Т" в нем
Сформировать однонаправленный кольцевой список и провести удвоение буквы &quot;Т&quot; в нем. Напечатать оба списка. прошу помочь!

Кольцевой стек
Есть задача: Реализуйте кольцевой стек на базе статического массива, фиксируя голову стека. Занесите в стек 10 псевдослучайных целых...

кольцевой сдвиг
привет всем коллегам))) подкиньте идею, пожалуйста, как реализовать кольцевой сдвиг в одномерном массиве на паскале? (и вправо, и влево) ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru