Форум программистов, компьютерный форум, киберфорум
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
0 / 0 / 1
Регистрация: 18.11.2011
Сообщений: 107
1

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

29.06.2012, 16:33. Просмотров 482. Ответов 0
Метки нет (Все метки)


Составила программу, но преподаватель сказал, что -то вроде:"для таких задачек, подобные простыни не составляют"..... Помогите оптимизировать - сделать код компактнее. Задача: нужно в кольцевой список, состоящий из определенного кол-ва элементов добавить N элементов, каждый новый элемент вставляется через К элементов кольца. Заранее спасибо за помощь.
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
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
program qwe;
    uses crt;
    const
      k1 = 5;
      k2 = 3;
      k3 = k1 + k2;
    TYPE
      PTR = ^SP;
      SP = RECORD
        INF : integer;
        next : PTR;
      END;
     
     
    procedure create_ring(var root: ptr);
    var
      k, zn : integer;
      i, j: ptr;
    begin
      new(root);
      root^.next := NIL;
      for k := 1 to k1 do
        begin
        zn := k;
        if k = 1 then
          begin
          root^.inf := zn;
          new(i);
          root^.next := i;
     
          end
        else
          if k < k1 then
            begin
            i^.inf := zn;
            new(j);
            i^.next := j;
            i := j;
            end
          else
            begin
            i^.inf := zn;
            i^.next := root;
            end;
        end;
    end;
    procedure destroy_ring(var root: ptr);
    var i, j: ptr;
    begin
      if root <> nil then
        begin
        i := root;
        repeat
          j := i^.next;
          dispose(i);
          i := j;
        until i = root;
        root := nil;
        end;
    end;
     
    procedure print_ring(root: ptr; len: integer);
    var
      k : integer;
      p: ptr;
    begin
      writeln('----------');
      p := root;
      for k := 1 to len do begin
        writeln('VALUE: ', p^.inf); writeln('');
        p := p^.next;
      end;
      writeln('----------');
    end;
     
     
     
    function create_list: ptr;
    var
      i: integer;
      root, p, tail: ptr;
    begin
      root := nil; tail := nil;
     
      for i := 1 to k2 do begin
        new(p);
        p^.next := nil;
        p^.inf := 10 * i;
     
        if root = nil then root := p
        else tail^.next := p;
     
        tail := p;
      end;
      create_list := root;
    end;
     
    procedure destroy_list(var root: ptr);
    var
      p, T: ptr;
    begin
      p := root;
      while p <> nil do begin
        T := p;
        p := p^.next;
        dispose(T);
      end;
      root := nil;
    end;
     
    procedure print_list(root: ptr);
    var p: ptr;
    begin
      writeln('----------');
      p := root;
      while p <> nil do begin
        writeln('VALUE: ', p^.inf); writeln;
        p := p^.next;
      end;
      writeln('----------');
    end;
     
    procedure merge(ring, list: ptr; step: integer);
    var
      p1, p2, new_node: ptr;
      i: integer;
    begin
      p1 := ring; p2 := list;
      while p2 <> nil do begin
     
        for i := 1 to step - 1 do
          if p1 <> nil then p1 := p1^.next;
     
        new(new_node);
        new_node^.inf := p2^.inf;
        new_node^.next := p1^.next;
        p1^.next := new_node;
     
        p1 := p1^.next^.next;
        p2 := p2^.next;
      end;
    end;
     
    var
      ring_root, list_root: ptr;
      step: integer;
     
    BEGIN
      clrscr;
      randomize;
      create_ring(ring_root);
      writeln('Оригинальный список (кольцевой)');
      print_ring(ring_root, k1);
      writeln('+++++++++++');
      list_root := create_list;
      writeln('Добавляемый список');
      print_list(list_root);
      write('Введите шаг вставки:');
      Readln(step);
     
      merge(ring_root, list_root, step);
     
      writeln('+++++++++++');
      writeln('Переформированный спискок');
      print_ring(ring_root, k3);
     
      destroy_ring(ring_root);
      destroy_list(list_root);
      readkey;
    END.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.06.2012, 16:33
Ответы с готовыми решениями:

сортировку и список кольцевой
1 ) Дан односвязный список отсортировать методом сортировки выбором (без функций и процедур ) 2)...

Динамический кольцевой список. Вывести n раз. Ошибка не выдает 1-ый символ.
Здравствуйте всем. Дана следующая задача: Текст, заканчивающийся точкой, занести в динамический...

Кольцевой сдвиг чисел влево
Допустим n=5 вывести на экран 12345 23451 34512 45123 51234 Василий01, вы уже не новичок и...

Написать код программы: кольцевой буфер
Кольцевой буфер

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.06.2012, 16:33

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.