0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 19
1

Динамические структуры данных

23.03.2009, 10:45. Показов 2187. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Помогите пожалуйста с решением данной задачи:

Задание: Создать объект - однонаправленный список L1 без головного элемента.
Добавить в стандартный набор объекта ваш метод согласно варианту.
Мой метод такой: Удалить два первых элемента, если они равны, иначе модуль их разности поместить на третье место.
В вашем методе не могут быть использованы другие методы объекта.
Ваш метод должен быть выполнен при условии, что в списке имеется достаточное количество элементов для выполнения операции, иначе вывести сообщение.
Все операции выполнять только изменением указателей на элементы.
Значения элементов задать в строке констант или в диалогов режиме.
Проверить размеры свободной памяти до выполнения программы и после (функцией MemAvail), эти значения должны совпадать.
Обязательно выводить список на экран до и после выполнения заданной операции. Например при удалении второго элемента:

Before Memaval = 280960
P - (12.34) - (-5.67) - (431.32) - (98.46) - nil
P - (12.34) - (431.32) - (98.46) - nil
After Memaval = 280960

Возможный вид метода:
function Method(<список параметров>):boolean;
Функция возвращает True, если выполнение прошло успешно и False в противном случае.

У меня имеется шаблон, туда вроде только метод добавить нужно...
Код
{--------------------------------------------------------------}
type  Inf=integer;           {- тип информационного поля       }
const Zero:Inf=0;            {- нулевая константа              }
type    Ptr=^EL;             {- указатель на элемент           }
        EL=record            {- элемент                        }
            Dn:Inf;          {- информационное поле            }
            Nx:Ptr;          {- ссылка на следующий злемент    }
           end;
   Stack = Object            {- объект - стек	}
            P:Ptr;
            constructor Init;        { Создать стек            }
            function  Empty:boolean; { Пустой ли стек ?        }
            procedure Push(D:Inf);   { Добавить в стек         }
            function  Pop:Inf;       { Взять из стека          }
            destructor Done;         { Удалить стек            }
            procedure Print;         { Печать стека            }
           end;
{--------------------------------------------------------------}
constructor Stack.Init;                 { Создать стек         }
  begin p:=nil; end;

function  Stack.Empty:boolean;          {Пустой ли стек        }
  begin if p=nil then Empty:=true else Empty:=false; end;

procedure Stack.Push(D:Inf);            {Добавить в стек       }
  var q:Ptr;
  begin
    new(q);
    q^.Dn:=D;
    q^.Nx:=p;
    p:=q;
  end;

function  Stack.Pop:Inf;                {Взять из стека        }
  var q:Ptr;
  begin Pop:=p^.Dn;  q:=p;  p:=q^.Nx;  Dispose(q);  end;

procedure Stack.Done;                   {Удалить стек          }
  var D:Inf;
  begin while not Empty do D:=Pop end;

procedure Stack.Print;                  {- печать стека        }
  var q:Ptr;
  begin			 { указатель p движется от начала списка до конца }
    q:=p;
    while q^.Nx<>nil do
      begin write(q^.Nx^.Dn,' ');q:=q^.Nx end;
  end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.03.2009, 10:45
Ответы с готовыми решениями:

Динамические структуры данных. Организация данных в списковые структуры
Написать программу вставки нового элемента в список за некоторым заданным по- рядковым номером...

Динамические структуры данных
нужна помощь в составление Алгоритма для задачи: Дана непустая последовательность...

Динамические структуры данных
Даны две очереди целых чисел. Создать дек из элементов очередей следующим образом: записывать в...

динамические структуры данных
Прошу помочь в решении задачи.. Слейте два упорядоченных неповозрастанию списка в один (также...

3
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 19
28.03.2009, 17:51  [ТС] 2
Ну что никто не в курсе как это делается ?
Помогите пожалст...
0
3067 / 727 / 69
Регистрация: 24.09.2008
Сообщений: 1,531
29.03.2009, 15:22 3
Начал делать ваше задание, так приходится менять все методы. Шаблон у вас супер, список строится начиная с конца , а печатается начиная с начала, т.е. получается, что первый элемент напечатается последним...

Добавлено через 24 минуты 52 секунды
На, держи...
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
{--------------------------------------------------------------}
uses
  crt;
type  Inf=integer;           {- тип информационного поля       }
const Zero:Inf=0;            {- нулевая константа              }
type    Ptr=^EL;             {- указатель на элемент           }
        EL=record            {- элемент                        }
            Dn:Inf;          {- информационное поле            }
            Nx:Ptr;          {- ссылка на следующий злемент    }
           end;
   Stack = Object            {- объект - стек }
            P:Ptr;
            constructor Init;        { Создать стек            }
            function  Empty:boolean; { Пустой ли стек ?        }
            procedure Push(D:Inf);   { Добавить в стек         }
            function  Pop:Inf;       { Взять из стека          }
            destructor Done;         { Удалить стек            }
            procedure Print;         { Печать стека            }
            Procedure npob(var adr:Ptr;var adr1:Ptr);
           end;
{--------------------------------------------------------------}
constructor Stack.Init;                 { Создать стек         }
begin
  p:=nil
end;
 
function  Stack.Empty:boolean;          {Пустой ли стек        }
begin
  if p=nil then
    Empty:=true
  else
    Empty:=false
end;
 
procedure Stack.Push(D:Inf);            {Добавить в стек       }
var q:Ptr;
begin
  new(q);
  q^.Dn:=D;
  p^.Nx:=q;
  p:=q;
  p^.Nx:=nil
end;
 
function  Stack.Pop:Inf;                {Взять из стека        }
var q:Ptr;
begin
  Pop:=p^.Dn;
  q:=p;
  p:=q^.Nx;
  Dispose(q)
end;
 
destructor Stack.Done;                   {Удалить стек          }
var D:Inf;
begin
  while not Empty do
    D:=Pop
end;
 
procedure Stack.Print;                  {- печать стека        }
var q:Ptr;
begin            { указатель p движется от начала списка до конца }
  q:=p;
  while q<>nil do
    begin
      write(q^.Dn,' ');
      q:=q^.Nx
    end
end;
 
Procedure Stack.npob(var adr:Ptr;var adr1:Ptr);
var
 i:integer;
begin
  p:=adr;
  if p^.Nx<>nil then
    if p^.Dn=p^.NX^.Dn then
    begin
      adr1:=adr;
      adr:=p^.NX^.NX;
    end
    else
    begin
      if p^.Nx^.Nx<>nil then
        p^.Nx^.NX^.Dn:=abs(p^.Dn-p^.NX^.Dn)
      else
      begin
        i:=abs(p^.Dn-p^.NX^.Dn);
        p:= p^.Nx;
        Push(i)
      end
    end;
end;
 
var
  a:Stack;
  adr,adr1:Ptr;
  c:char;
  s:string;
  p:boolean;
  i,code:integer;
  MemBefore:longint;
begin
  Clrscr;
  Writeln('BBodute 3Ha4eHu9 B cnucok (ToLbKo L/uFPbl)');
  Writeln('Dl9 3aBePLLIEHu9 BBoDa Ha}l{MuTe Esc');
  p:=false;
  MemBefore:=MemAvail;
  repeat
    gotoXY(1,WhereY);
    clrEoL;
    c:=readkey;
    s:='';
    While (c<>#13) and (c<>#27) do
    begin
      if (c>#47) and (c<#57) then
      begin
        s:=s+c;
        Write(c);
      end
      else
      if c=#8 then
      begin
        delete(s,length(s),1);
        gotoXY(1,WhereY);
        clrEol;
        Write(s);
      end;
      c:=readkey;
    end;
    val(s,i,code);
    if c=#13 then
      if code=0 then
        if not(p) then
        begin
          a.Init;
          a.Push(i);
          adr:=a.p;
          p:=true;
        end
        else
          a.Push(i);
  until c=#27;
  clrscr;
  adr1:=adr;
  if p then
  begin
    a.npob(adr,adr1);
 
  end;
  if p then
  begin
    a.p:=adr;
    if adr=nil then
      Writeln('Cnucok nyCt')
    else
      a.Print;
    Writeln;
    a.p:=adr1;
    a.Done;
    Writeln('Before MemAvail= ' ,MemBefore);
    Writeln('After MeMAvail= ' , MemAvail);
    readln;
  end;
end.
Добавлено через 49 секунд
З.Ы. Ввод минуса (для получения отрицательных чисел) не делал, я думаю ты и сам сможешь это доделать...

Добавлено через 36 секунд
З.З.Ы. И да, я немного переделал несколько методов, которые у тебя были в шаблоне.
1
0 / 0 / 0
Регистрация: 26.11.2008
Сообщений: 19
07.04.2009, 17:25  [ТС] 4
Благодарю, только сегодня добрался до форума и получил ответ, спасибо!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.04.2009, 17:25
Помогаю со студенческими работами здесь

динамические структуры данных
Дан упорядоченный список информации о книге (ФИО автора, название книги, год издания). Список...

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

Динамические структуры данных
Пользователь вводит целые числа (ввод заканчивается словом end). Числа добавляются в очередь....

динамические структуры данных
program dinam; type spisok=^elem; elem=record fio,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru