1 / 11

Реализация на свързан списък

Реализация на свързан списък. 1. Декларации определящи свързан списък ( синтаксис ). Type T=integer; List=^DBox; DBox=record inf:T; addr:List end; Var P:List;. 2. Семантика на декларацията. Задава се свързан списък Р с базов тип Т, представен с една връзка.

whitney
Télécharger la présentation

Реализация на свързан списък

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Реализация на свързан списък

  2. 1. Декларации определящи свързан списък (синтаксис) Type T=integer; List=^DBox; DBox=record inf:T; addr:List end; Var P:List;

  3. 2. Семантика на декларацията • Задава се свързан списък Р с базов тип Т, представен с една връзка. • Променливата Р е указател към запис от тип DBox с две полета: • Inf- съдържа стойността на компонентата на списъка; • addr- съдържа адреса на следващата компонента на списъка. • Графична илюстрация: P^: DBox Р P^.inf:T P^.addr:List

  4. 3. Операции със свързан списък • Създаване на празен свързан списък: Procedure Create_Empty_List(var p:List); Begin p:=nil end; • Проверка за празен свързан списък: function Empty_List(p:List):boolean; begin Empty_List:=p=nil end; • Извличане на стойността на първата компонента: function First(p:List):T; begin if not Empty_List(p) then First:=p^.inf end;

  5. Достъп до следващата компонента: Function Next(p:List):List; begin if not Empty_List(p) then Next:=p^.addr end; • Добавяне на елемент пред първия елемент на свързан списък: procedure Insert1(var p:List; elem:T); var r:List; begin new(r); r^.inf:=elem; r^.addr:=p; p:=r end;

  6. Добавяне на елемент след указан елемент: procedure Insert2(var p:List; q:List; elem:T); var r:List; begin new(r); r^.inf:=elem; r^.addr:=q^.addr; q^.addr:=r end;

  7. Добавяне на елемент пред указан елемент: procedure Insert3(var p:List; q:List; elem:T); var r:List; begin if q=p then Insert1(p,elem) else begin r:=p; while r^.addr<>q do r:=r^.addr; Insert2(p,r,elem) end end;

  8. Отстраняване на първия елемент: procedure Delete1(var p:List; var elem:T); var s:List; begin if not Empty_List(p) then begin s:=p; elem:=p^.inf; p:=p^addr; dispose(s) end end;

  9. Отстраняване на елемент след указан елемент: procedure Delete2(var p:List; q:List; var elem:T); var s:List; begin if q^.addr<>nil then begin s:=q^.addr; elem:=s^.inf; q^.addr:=s^.addr; dispose(s) end end;

  10. Отстраняване на елемент сочен от даден указател: procedure Delete(var p:List; q:List; var elem:T); var r:List; begin if q=p then Delete1(p,elem) else begin r:=p; while r^.addr<>q do r:=r^.addr; Delete2(p,r,elem) end end;

  11. 4. Задачи върху свързани списъци • Задача 1: да се напише функция, която намира дължината на свързан списък: function Size(p:List):integer; var i:integer; begin i:=0 while not Empty_List(p) do begin i:=i+1; p:=Next(p) end; Size:=i end;

More Related