Процедуры для работы с динамической структурой спискового типа

Задача

Создать процедуры для добавления элемента в заданную позицию списка (add), удаления элемента из списка по его номеру (delitem), вывода содержимого списка на экран (writestack).

Решение

 

Описание переменных: 

head – указатель на начало списка;
p – указатель на обрабатываемую область памяти;
pl -

Программа на языке Паскаль: 

 

type
    pitem = ^item;
    item = record
        data: integer;
        next: pitem;
    end;
 
var
    head, p, p1: pitem;
    n, k, l: integer;
 
procedure add(x,i:integer);
var j: integer;
begin
    if (i > 0) and (i <= n+1) then begin
        new(p);
        p^.data := x;
        if i = 1 then begin
            p^.next := head;
            head := p
        end
        else begin
            p1 := head;
            for j := 2 to i-1 do
                p1 := p1^.next;
            p^.next := p1^.next;
            p1^.next := p;
        end;
        n := n + 1;
    end;
end;
procedure delitem(i:integer);
var k: integer;
begin
    if (i>=1) and (i<=n) and (head<>nil) then
        if i = 1 then begin
            p := head^.next;
            dispose(head);
            head := p;
        end
        else begin
            p := head;
            for k := 2 to i-1 do
                p := p^.next;
            p1 := p^.next;
            p^.next := p1^.next;
            dispose(p1);
        end;
end;
procedure writelist;
begin
    p1 := head;
    writeln('Содержимое списка. ');
    while p1 <> nil do begin
        write(p1^.data,' ');
        p1 := p1^.next;
    end;
    writeln;
end;
begin
    n := 0;
    head := nil;
    for k := 1 to 10 do add(k,k);
    writelist;
    write('Введите значение добавляемого элемента: ');
    readln(k);
    write('Введите позицию добавляемого элемента: ');
    readln(l);
    add(k,l);
    writelist;
    write('Введите номер удаляемого элемента: ');
    readln(k);
    delitem(k);
    writelist;
 
readln
end.

 

Тема

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

Уровень

Сложные задачи

Добавить комментарий