linked lists - pepperdine university€¦ · 21 linked lists the procedure new is a standard...
TRANSCRIPT
![Page 1: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/1.jpg)
B B
Chapter
21
Linked Lists
![Page 2: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/2.jpg)
Computing Fundamentals Chapter 21 Linked Lists
MODULE Pbox21A;IMPORT StdLog;
PROCEDURE PointerExample1*;TYPE
Node = RECORDi: INTEGER;x: REAL
END;VAR
a: POINTER TO Node;BEGIN
NEW(a);a.i := 6;a.x := 15.2;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("a.x = "); StdLog.Real(a.x); StdLog.Ln
END PointerExample1;
END Pbox21A.
Figure 21.1A program that illustrates the Component Pascal pointer type.
464
![Page 3: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/3.jpg)
Computing Fundamentals Chapter 21 Linked Lists
The procedure NEW is a standard Component Pascal procedure that does two things:
■ It allocates storage from the heap. Because a was previously declared to be a pointer to a record with an integer and a real component, NEW(a) allocates enough memory to store a record with those components.
■ It assigns to a the location of this newly allocated storage. So a now points to the location of a record.
The two actions of NEW
465
![Page 4: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/4.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample1*; LogTYPE
Node = RECORDi: INTEGER;x: REAL
END;VAR
a: POINTER TO Node;❚ BEGIN
NEW(a);a.i := 6;a.x := 15.2;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("a.x = "); StdLog.Real(a.x); StdLog.Ln
END PointerExample1;retAddr ra0
a
Run-time stack Heap
464
![Page 5: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/5.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample1*; LogTYPE
Node = RECORDi: INTEGER;x: REAL
END;VAR
a: POINTER TO Node;BEGIN
❚ NEW(a);a.i := 6;a.x := 15.2;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("a.x = "); StdLog.Real(a.x); StdLog.Ln
END PointerExample1;x
i
retAddr ra0
a
Run-time stack Heap
464
![Page 6: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/6.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample1*; LogTYPE
Node = RECORDi: INTEGER;x: REAL
END;VAR
a: POINTER TO Node;BEGIN
NEW(a);❚ a.i := 6;
a.x := 15.2;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("a.x = "); StdLog.Real(a.x); StdLog.Ln
END PointerExample1;
6
x
i
retAddr ra0
a
Run-time stack Heap
464
![Page 7: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/7.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample1*; LogTYPE
Node = RECORDi: INTEGER;x: REAL
END;VAR
a: POINTER TO Node;BEGIN
NEW(a);a.i := 6;
❚ a.x := 15.2;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("a.x = "); StdLog.Real(a.x); StdLog.Ln
END PointerExample1;15.2
6
x
i
retAddr ra0
a
Run-time stack Heap
464
![Page 8: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/8.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample1*; LogTYPE a.i = 6
Node = RECORDi: INTEGER;x: REAL
END;VAR
a: POINTER TO Node;BEGIN
NEW(a);a.i := 6;a.x := 15.2;
❚ StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("a.x = "); StdLog.Real(a.x); StdLog.Ln
END PointerExample1;15.2
6
x
i
retAddr ra0
a
Run-time stack Heap
464
![Page 9: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/9.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample1*; LogTYPE a.i = 6
Node = RECORD a.x = 15.2i: INTEGER;x: REAL
END;VAR
a: POINTER TO Node;BEGIN
NEW(a);a.i := 6;a.x := 15.2;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;
❚ StdLog.String("a.x = "); StdLog.Real(a.x); StdLog.LnEND PointerExample1;
15.2
6
x
i
retAddr ra0
a
Run-time stack Heap
464
![Page 10: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/10.jpg)
Computing Fundamentals Chapter 21 Linked Lists
(a) Call PointerExample1
retAddr ra0
a
(b) NEW(a)
x
i
(c) a.i := 6 (d) a.x := 15.2
Run-time stack Heap Figure 21.2The trace of the procedure in Figure 21.1.
retAddr ra0
a
Run-time stack Heap
6
x
i
retAddr ra0
a
15.2
6
x
i
retAddr ra0
a
464
![Page 11: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/11.jpg)
Computing Fundamentals Chapter 21 Linked Lists
MODULE Pbox21B;IMPORT StdLog;
PROCEDURE PointerExample2*;TYPE
Node = RECORDi: INTEGER
END;VAR
a, b, c: POINTER TO Node;BEGIN
NEW(a); a.i := 5;NEW(b); b.i := 3;c := a;a := b;a.i := 2 + c.i;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("b.i = "); StdLog.Int(b.i); StdLog.Ln;StdLog.String("c.i = "); StdLog.Int(c.i); StdLog.Ln
END PointerExample2;
END Pbox21B.
Figure 21.3The effect of the assignment operation on pointers.
466
![Page 12: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/12.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample2*; LogTYPE
Node = RECORDi: INTEGER
END;VAR
a, b, c: POINTER TO Node;❚ BEGIN
NEW(a);a.i := 5;NEW(b);b.i := 3;c := a;a := b;a.i := 2 + c.i;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("b.i = "); StdLog.Int(b.i); StdLog.Ln;StdLog.String("c.i = "); StdLog.Int(c.i); StdLog.Ln
END PointerExample2;
ra0
a
b
c
466
![Page 13: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/13.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample2*; LogTYPE
Node = RECORDi: INTEGER
END;VAR
a, b, c: POINTER TO Node;BEGIN
❚ NEW(a);a.i := 5;NEW(b);b.i := 3;c := a;a := b;a.i := 2 + c.i;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("b.i = "); StdLog.Int(b.i); StdLog.Ln;StdLog.String("c.i = "); StdLog.Int(c.i); StdLog.Ln
END PointerExample2;
ra0
a
b
c
466
![Page 14: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/14.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample2*; LogTYPE
Node = RECORDi: INTEGER
END;VAR
a, b, c: POINTER TO Node;BEGIN
NEW(a);❚ a.i := 5;
NEW(b);b.i := 3;c := a;a := b;a.i := 2 + c.i;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("b.i = "); StdLog.Int(b.i); StdLog.Ln;StdLog.String("c.i = "); StdLog.Int(c.i); StdLog.Ln
END PointerExample2;
5
ra0
a
b
c
466
![Page 15: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/15.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample2*; LogTYPE
Node = RECORDi: INTEGER
END;VAR
a, b, c: POINTER TO Node;BEGIN
NEW(a);a.i := 5;
❚ NEW(b);b.i := 3;c := a;a := b;a.i := 2 + c.i;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("b.i = "); StdLog.Int(b.i); StdLog.Ln;StdLog.String("c.i = "); StdLog.Int(c.i); StdLog.Ln
END PointerExample2;
5
ra0
a
b
c
466
![Page 16: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/16.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample2*; LogTYPE
Node = RECORDi: INTEGER
END;VAR
a, b, c: POINTER TO Node;BEGIN
NEW(a);a.i := 5;NEW(b);
❚ b.i := 3;c := a;a := b;a.i := 2 + c.i;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("b.i = "); StdLog.Int(b.i); StdLog.Ln;StdLog.String("c.i = "); StdLog.Int(c.i); StdLog.Ln
END PointerExample2;
5
ra0
a
b
c 3
466
![Page 17: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/17.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample2*; LogTYPE
Node = RECORDi: INTEGER
END;VAR
a, b, c: POINTER TO Node;BEGIN
NEW(a);a.i := 5;NEW(b);b.i := 3;
❚ c := a;a := b;a.i := 2 + c.i;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("b.i = "); StdLog.Int(b.i); StdLog.Ln;StdLog.String("c.i = "); StdLog.Int(c.i); StdLog.Ln
END PointerExample2;
5
ra0
a
b
c 3
466
![Page 18: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/18.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample2*; LogTYPE
Node = RECORDi: INTEGER
END;VAR
a, b, c: POINTER TO Node;BEGIN
NEW(a);a.i := 5;NEW(b);b.i := 3;c := a;
❚ a := b;a.i := 2 + c.i;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("b.i = "); StdLog.Int(b.i); StdLog.Ln;StdLog.String("c.i = "); StdLog.Int(c.i); StdLog.Ln
END PointerExample2;
5
ra0
a
b
c 3
466
![Page 19: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/19.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample2*; LogTYPE
Node = RECORDi: INTEGER
END;VAR
a, b, c: POINTER TO Node;BEGIN
NEW(a);a.i := 5;NEW(b);b.i := 3;c := a;a := b;
❚ a.i := 2 + c.i;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("b.i = "); StdLog.Int(b.i); StdLog.Ln;StdLog.String("c.i = "); StdLog.Int(c.i); StdLog.Ln
END PointerExample2;
5
ra0
a
b
c 7
466
![Page 20: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/20.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample2*; LogTYPE a.i = 7
Node = RECORDi: INTEGER
END;VAR
a, b, c: POINTER TO Node;BEGIN
NEW(a);a.i := 5;NEW(b);b.i := 3;c := a;a := b;a.i := 2 + c.i;
❚ StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("b.i = "); StdLog.Int(b.i); StdLog.Ln;StdLog.String("c.i = "); StdLog.Int(c.i); StdLog.Ln
END PointerExample2;
5
ra0
a
b
c 7
466
![Page 21: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/21.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample2*; LogTYPE a.i = 7
Node = RECORD b.i = 7i: INTEGER
END;VAR
a, b, c: POINTER TO Node;BEGIN
NEW(a);a.i := 5;NEW(b);b.i := 3;c := a;a := b;a.i := 2 + c.i;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;
❚ StdLog.String("b.i = "); StdLog.Int(b.i); StdLog.Ln;StdLog.String("c.i = "); StdLog.Int(c.i); StdLog.Ln
END PointerExample2;
5
ra0
a
b
c 7
466
![Page 22: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/22.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE PointerExample2*; LogTYPE a.i = 7
Node = RECORD b.i = 7i: INTEGER c.i = 5
END;VAR
a, b, c: POINTER TO Node;BEGIN
NEW(a);a.i := 5;NEW(b);b.i := 3;c := a;a := b;a.i := 2 + c.i;StdLog.String("a.i = "); StdLog.Int(a.i); StdLog.Ln;StdLog.String("b.i = "); StdLog.Int(b.i); StdLog.Ln;
❚ StdLog.String("c.i = "); StdLog.Int(c.i); StdLog.LnEND PointerExample2;
5
ra0
a
b
c 7
466
![Page 23: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/23.jpg)
Computing Fundamentals Chapter 21 Linked Lists
(a) Call PointerExample2
ra0
a
b
c
(b) NEW(a) (c) a.i := 5 (d) NEW(b)
(e) b.i := 3 (f) c := a (g) a := b (h) a.i := 2 + c.i
5
ra0
a
b
c 7
ra0
a
b
c
5
ra0
a
b
c
5
ra0
a
b
c
5
ra0
a
b
c 3
5
ra0
a
b
c 3
5
ra0
a
b
c 3
Figure 21.4A trace of Figure 21.3.
466
![Page 24: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/24.jpg)
Computing Fundamentals Chapter 21 Linked Lists
In general, if pointer p points to a record r that contains field f, then
■ p is a pointer
■ p^ is the record r to which p points
■ p^.f is field f of the record r to which p points.
The notation p.f is an abbreviation for the longer notation p^.f. The period abbreviation for pointers to records
468
![Page 25: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/25.jpg)
Computing Fundamentals Chapter 21 Linked Lists
TYPEList = POINTER TO Node;Node = RECORD
value: REAL;next: List
END;Figure 21.5The structure of a record of type Node in Figure 21.6.
value next
469
![Page 26: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/26.jpg)
Computing Fundamentals Chapter 21 Linked Lists
MODULE Pbox21C;IMPORT StdLog;
PROCEDURE LinkedListExample*;TYPE
List = POINTER TO Node;Node = RECORD
value: REAL;next: List
END;VAR
first, p: List;BEGIN
(* Create linked list *)NEW(first); first.value := 4.5;p := first;NEW(first); first.value := 1.2;first.next := p; p := first;NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)p := first;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
END Pbox21C.
Figure 21.6A program that constructs a linked list of three real numbers.
470
![Page 27: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/27.jpg)
Computing Fundamentals Chapter 21 Linked Lists
❚ BEGIN Log(* Create linked list *)NEW(first); first.value := 4.5;p := first;NEW(first); first.value := 1.2;first.next := p;p := first;NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)p := first;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
ra0
first
p
471
![Page 28: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/28.jpg)
Computing Fundamentals Chapter 21 Linked Lists
BEGIN Log(* Create linked list *)
❚ NEW(first); first.value := 4.5;p := first;NEW(first); first.value := 1.2;first.next := p;p := first;NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)p := first;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
ra0
first
p
4.5
471
![Page 29: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/29.jpg)
Computing Fundamentals Chapter 21 Linked Lists
BEGIN Log(* Create linked list *)NEW(first); first.value := 4.5;
❚ p := first;NEW(first); first.value := 1.2;first.next := p;p := first;NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)p := first;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
ra0
first
p
4.5
471
![Page 30: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/30.jpg)
Computing Fundamentals Chapter 21 Linked Lists
BEGIN Log(* Create linked list *)NEW(first); first.value := 4.5;p := first;
❚ NEW(first); first.value := 1.2;first.next := p;p := first;NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)p := first;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
ra0
first
p
4.51.2
471
![Page 31: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/31.jpg)
Computing Fundamentals Chapter 21 Linked Lists
BEGIN Log(* Create linked list *)NEW(first); first.value := 4.5;p := first;NEW(first); first.value := 1.2;
❚ first.next := p;p := first;NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)p := first;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
ra0
first
p
4.51.2
471
![Page 32: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/32.jpg)
Computing Fundamentals Chapter 21 Linked Lists
BEGIN Log(* Create linked list *)NEW(first); first.value := 4.5;p := first;NEW(first); first.value := 1.2;first.next := p;
❚ p := first;NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)p := first;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
ra0
first
p
4.51.2
471
![Page 33: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/33.jpg)
Computing Fundamentals Chapter 21 Linked Lists
BEGIN Log(* Create linked list *)NEW(first); first.value := 4.5;p := first;NEW(first); first.value := 1.2;first.next := p;p := first;
❚ NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)p := first;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
ra0
first
p
7.3 4.51.2
471
![Page 34: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/34.jpg)
Computing Fundamentals Chapter 21 Linked Lists
BEGIN Log(* Create linked list *)NEW(first); first.value := 4.5;p := first;NEW(first); first.value := 1.2;first.next := p;p := first;NEW(first); first.value := 7.3;
❚ first.next := p;(* Output linked list *)p := first;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
ra0
first
p
7.3 4.51.2
471
![Page 35: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/35.jpg)
Computing Fundamentals Chapter 21 Linked Lists
BEGIN Log(* Create linked list *)NEW(first); first.value := 4.5;p := first;NEW(first); first.value := 1.2;first.next := p;p := first;NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)
❚ p := first;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
ra0
first
p
7.3 4.51.2
471
![Page 36: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/36.jpg)
Computing Fundamentals Chapter 21 Linked Lists
BEGIN Log(* Create linked list *) 7.3NEW(first); first.value := 4.5;p := first;NEW(first); first.value := 1.2;first.next := p;p := first;NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)p := first;
❚ StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
ra0
first
p
7.3 4.51.2
471
![Page 37: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/37.jpg)
Computing Fundamentals Chapter 21 Linked Lists
BEGIN Log(* Create linked list *) 7.3NEW(first); first.value := 4.5;p := first;NEW(first); first.value := 1.2;first.next := p;p := first;NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)p := first;StdLog.Real(p.value); StdLog.String(" ");
❚ p := p.next;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
ra0
first
p
7.3 4.51.2
471
![Page 38: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/38.jpg)
Computing Fundamentals Chapter 21 Linked Lists
BEGIN Log(* Create linked list *) 7.3 1.2NEW(first); first.value := 4.5;p := first;NEW(first); first.value := 1.2;first.next := p;p := first;NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)p := first;StdLog.Real(p.value); StdLog.String(" ");p := p.next;
❚ StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
ra0
first
p
7.3 4.51.2
471
![Page 39: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/39.jpg)
Computing Fundamentals Chapter 21 Linked Lists
BEGIN Log(* Create linked list *) 7.3 1.2NEW(first); first.value := 4.5;p := first;NEW(first); first.value := 1.2;first.next := p;p := first;NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)p := first;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ");
❚ p := p.next;StdLog.Real(p.value); StdLog.String(" ")
END LinkedListExample;
ra0
first
p
7.3 4.51.2
471
![Page 40: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/40.jpg)
Computing Fundamentals Chapter 21 Linked Lists
BEGIN Log(* Create linked list *) 7.3 1.2 4.5NEW(first); first.value := 4.5;p := first;NEW(first); first.value := 1.2;first.next := p;p := first;NEW(first); first.value := 7.3;first.next := p;(* Output linked list *)p := first;StdLog.Real(p.value); StdLog.String(" ");p := p.next;StdLog.Real(p.value); StdLog.String(" ");p := p.next;
❚ StdLog.Real(p.value); StdLog.String(" ")END LinkedListExample;
ra0
first
p
7.3 4.51.2
471
![Page 41: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/41.jpg)
Computing Fundamentals Chapter 21 Linked Lists
(a) Call LinkedListExample (b) NEW(first); first.value := 4.5
(c) p := first (d) NEW(first); first.value := 1.2
(e) first.next := p (f) p := first
(g) NEW(first); first.value := 7.3 (h) first.next := p
ra0
first
p
7.3 4.51.2
ra0
first
p
7.3 4.51.2
ra0
first
p
1.2 4.5
ra0
first
p
1.2 4.5
ra0
first
p
4.5
ra0
first
p
ra0
first
p
4.5
ra0
first
p
1.2 4.5
Figure 21.7The trace of Figure 21.6 to create a linked list.
471
![Page 42: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/42.jpg)
Computing Fundamentals Chapter 21 Linked Lists
(a) p := first
(b) p := p.next
(c) p := p.next
Figure 21.8The trace of the procedure in Figure 21.6 to output a linked list.
ra0
first
p
7.3 4.51.2
ra0
first
p
7.3 4.51.2
ra0
first
p
7.3 4.51.2
473
![Page 43: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/43.jpg)
Computing Fundamentals Chapter 21 Linked Lists
p := first;WHILE p # NIL DO
StdLog.Real(p.value); StdLog.String(" ");p := p.next
END
473
![Page 44: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/44.jpg)
Computing Fundamentals Chapter 21 Linked Lists
TYPEAlphaPtr = POINTER TO Alpha;BetaPtr = POINTER TO Beta;GammaPtr = POINTER TO Gamma;
VARalphaPtr: AlphaPtr;betaPtr: BetaPtr;gammaPtr: GammaPtr;
Figure 21.9The object-oriented relationship of inheritance between Alpha, Beta, and Gamma.
Alpha
Beta Gamma
474
![Page 45: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/45.jpg)
Computing Fundamentals Chapter 21 Linked Lists
You can assign the specific to the general, but you cannot assign the general tothe specific.
betaPtr := alphaPtr
alphaPtr := betaPtr
The fundamental class assignment rule
474
![Page 46: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/46.jpg)
Computing Fundamentals Chapter 21 Linked Lists
You can assign the specific to the general, but you cannot assign the general tothe specific.
betaPtr := alphaPtr Not legal
alphaPtr := betaPtr
The fundamental class assignment rule
474
![Page 47: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/47.jpg)
Computing Fundamentals Chapter 21 Linked Lists
You can assign the specific to the general, but you cannot assign the general tothe specific.
betaPtr := alphaPtr Not legal
alphaPtr := betaPtr Legal
The fundamental class assignment rule
474
![Page 48: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/48.jpg)
Computing Fundamentals Chapter 21 Linked Lists
DEFINITION PboxCListADT;
TYPECList = POINTER TO Node;
PROCEDURE Clear (OUT lst: CList);PROCEDURE Empty (lst: CList): BOOLEAN;PROCEDURE GoNext (VAR lst: CList);PROCEDURE Insert (VAR lst: CList; val: POINTER TO ANYREC);PROCEDURE NodeContent (lst: CList): POINTER TO ANYREC;
END PboxCListADT.
Figure 21.10The interface of the circular list abstract data type.
477
![Page 49: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/49.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Clear (OUT lst: CList)postlst is cleared to the empty list.
❚PboxCListADT.Clear(myList)
Figure 21.11The result of calling procedure Clear.
myList
A B C
478
![Page 50: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/50.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Clear (OUT lst: CList)postlst is cleared to the empty list.
❚ PboxCListADT.Clear(myList)
Figure 21.11The result of calling procedure Clear.
myList
478
![Page 51: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/51.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Empty (lst: CList): BOOLEANpostReturns TRUE if lst is empty. Otherwise returns FALSE.
478
![Page 52: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/52.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE GoNext (VAR lst: CList)prelst is not empty. 20postThe next location in lst is designated as the current item.
❚PboxCListADT.GoNext(myList)
myList
A B C
Figure 21.12The result of calling procedure GoNext.
479
![Page 53: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/53.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE GoNext (VAR lst: CList)prelst is not empty. 20postThe next location in lst is designated as the current item.
❚ PboxCListADT.GoNext(myList)
myList
A B C
Figure 21.12The result of calling procedure GoNext.
479
![Page 54: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/54.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Insert (VAR lst: CList; val: POINTER TO ANYREC)postValue val is inserted in lst after the current item, and it becomes the current item.
❚PboxCListADT.Insert(myList, myPtr)
CmyPtr
myList
A B
Figure 21.13The result of calling procedure Insert.
479
![Page 55: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/55.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Insert (VAR lst: CList; val: POINTER TO ANYREC)postValue val is inserted in lst after the current item, and it becomes the current item.
❚ PboxCListADT.Insert(myList, myPtr)
myList
A BC
myPtr
Figure 21.13The result of calling procedure Insert.
479
![Page 56: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/56.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE NodeContent (lst: CList): POINTER TO ANYRECprelst is not empty. 20postReturns the content from the current item of lst.
❚myPtr := PboxCListADT.NodeContent(myList) (MyPtr)
myPtr
myList
A B C
Figure 21.14The result of calling procedure NodeContent when myList initially has the structure of Figure 21.11(a).
480
![Page 57: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/57.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE NodeContent (lst: CList): POINTER TO ANYRECprelst is not empty. 20postReturns the content from the current item of lst.
❚ myPtr := PboxCListADT.NodeContent(myList) (MyPtr)
myPtr
myList
A B C
Figure 21.14The result of calling procedure NodeContent when myList initially has the structure of Figure 21.11(a).
480
![Page 58: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/58.jpg)
Computing Fundamentals Chapter 21 Linked Lists
TYPEString64 = ARRAY 64 OF CHAR;Book = POINTER TO RECORD
title: String64;author: String64;price: REAL
END;
481
![Page 59: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/59.jpg)
Computing Fundamentals Chapter 21 Linked Lists
Figure 21.15The dialog box for a program that uses the circular list from module PboxCListADT.
481
![Page 60: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/60.jpg)
Computing Fundamentals Chapter 21 Linked Lists
cList
Human Action
Ludwig von Mises
34.95
On Liberty
John Stuart Mill
7.95
The Road to Serfdom
Friedrich A. Hayek
10.95
The Fountainhead
Ayn Rand
44.95
Figure 21.16The circular list corresponding to the dialog box in Figure 21.15.
481
![Page 61: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/61.jpg)
Computing Fundamentals Chapter 21 Linked Lists
MODULE Pbox21D;IMPORT Dialog, PboxCListADT;
TYPEString64 = ARRAY 64 OF CHAR;Book = POINTER TO RECORD
title: String64;author: String64;price: REAL
END;
VARd*: RECORD
titleOut-, authorOut- : String64;priceOut-: REAL;titleIn*, authorIn* : String64;priceIn*: REAL;total-: REAL
END;cList: PboxCListADT.CList;
Figure 21.17The program that implements the dialog box of Figure 21.15.
482
![Page 62: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/62.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE ClearDialog;BEGIN
d.titleOut := ""; d.authorOut := ""; d.priceOut := 0.0;d.titleIn := ""; d.authorIn := ""; d.priceIn := 0.0;d.total := 0.0
END ClearDialog;
PROCEDURE SetBookOut (b: Book);BEGIN
d.titleOut := b.title;d.authorOut := b.author;d.priceOut := b.price
END SetBookOut;
PROCEDURE SetTotal;BEGIN
(* A problem for the student *)d.total := 999.99
END SetTotal;
482
![Page 63: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/63.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Clear*;BEGIN
ClearDialog;PboxCListADT.Clear(cList);Dialog.Update(d)
END Clear;
PROCEDURE Next*;VAR
book: Book;BEGIN
IF ~PboxCListADT.Empty(cList) THENPboxCListADT.GoNext(cList);book := PboxCListADT.NodeContent(cList) (Book);SetBookOut(book);Dialog.Update(d)
ENDEND Next;
483
![Page 64: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/64.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Previous*;BEGIN
(* A problem for the student *)END Previous;
PROCEDURE Delete*;BEGIN
(* A problem for the student *)END Delete;
483
![Page 65: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/65.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Insert*;VAR
book: Book;BEGIN
NEW(book);book.title := d.titleIn;book.author := d.authorIn;book.price := d.priceIn;PboxCListADT.Insert(cList, book);SetBookOut(book);SetTotal;Dialog.Update(d)
END Insert;
BEGINClear
END Pbox21D.
483
![Page 66: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/66.jpg)
Computing Fundamentals Chapter 21 Linked Lists
MODULE PboxCListADT;
TYPECList* = POINTER TO Node;Node = RECORD
value: POINTER TO ANYREC;next: CList
END;
PROCEDURE Clear* (OUT lst: CList);BEGIN
lst := NILEND Clear;
PROCEDURE Empty* (lst: CList): BOOLEAN;BEGIN
RETURN lst = NILEND Empty;
Figure 21.18Implementation of the circular list PboxCListADT.CList.
485
![Page 67: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/67.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE GoNext* (VAR lst: CList);BEGIN
ASSERT (lst # NIL, 20);lst := lst.next
END GoNext;
PROCEDURE NodeContent* (lst: CList): POINTER TO ANYREC;BEGIN
ASSERT (lst # NIL, 20);RETURN lst.value
END NodeContent;
485
![Page 68: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/68.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Insert* (VAR lst: CList; val: POINTER TO ANYREC);VAR
temp: CList;BEGIN
IF lst = NIL THENNEW(lst);lst.value := val;lst.next := lst
ELSEtemp := lst.next;NEW(lst.next);lst := lst.next;lst.value := val;lst.next := temp
ENDEND Insert;
END PboxCListADT.
485
![Page 69: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/69.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Clear* (OUT lst: CList);❚ BEGIN
lst := NILEND Clear;
Figure 21.19Implementation of procedure Clear with automatic garbage collection.
lst
A B
486
![Page 70: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/70.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Clear* (OUT lst: CList);BEGIN
❚ lst := NILEND Clear;
Figure 21.19Implementation of procedure Clear with automatic garbage collection.
lst
A B
486
![Page 71: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/71.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Clear* (OUT lst: CList);BEGIN
❚ lst := NILEND Clear;
Figure 21.19Implementation of procedure Clear with automatic garbage collection.
lst
486
![Page 72: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/72.jpg)
Computing Fundamentals Chapter 21 Linked Lists
Figure 21.20Execution of procedure PboxCListADT.Insert with a nonempty list.
![Page 73: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/73.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Insert* (VAR lst: CList; val: POINTER TO ANYREC);VAR
temp: CList;❚ BEGIN
IF lst = NIL THENNEW(lst);lst.value := val;lst.next := lst
ELSEtemp := lst.next;NEW(lst.next);lst := lst.next;lst.value := val;lst.next := temp
ENDEND Insert;
lst
A BC
val
temp
487
![Page 74: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/74.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Insert* (VAR lst: CList; val: POINTER TO ANYREC);VAR
temp: CList;BEGIN
❚ IF lst = NIL THENNEW(lst);lst.value := val;lst.next := lst
ELSEtemp := lst.next;NEW(lst.next);lst := lst.next;lst.value := val;lst.next := temp
ENDEND Insert;
lst
A BC
val
temp
487
![Page 75: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/75.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Insert* (VAR lst: CList; val: POINTER TO ANYREC);VAR
temp: CList;BEGIN
IF lst = NIL THENNEW(lst);lst.value := val;lst.next := lst
ELSE❚ temp := lst.next;
NEW(lst.next);lst := lst.next;lst.value := val;lst.next := temp
ENDEND Insert;
lst
A BC
val
temp
487
![Page 76: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/76.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Insert* (VAR lst: CList; val: POINTER TO ANYREC);VAR
temp: CList;BEGIN
IF lst = NIL THENNEW(lst);lst.value := val;lst.next := lst
ELSEtemp := lst.next;
❚ NEW(lst.next);lst := lst.next;lst.value := val;lst.next := temp
ENDEND Insert;
lst
A BC
val
temp
487
![Page 77: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/77.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Insert* (VAR lst: CList; val: POINTER TO ANYREC);VAR
temp: CList;BEGIN
IF lst = NIL THENNEW(lst);lst.value := val;lst.next := lst
ELSEtemp := lst.next;NEW(lst.next);
❚ lst := lst.next;lst.value := val;lst.next := temp
ENDEND Insert;
lst
A BC
val
temp
487
![Page 78: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/78.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Insert* (VAR lst: CList; val: POINTER TO ANYREC);VAR
temp: CList;BEGIN
IF lst = NIL THENNEW(lst);lst.value := val;lst.next := lst
ELSEtemp := lst.next;NEW(lst.next);lst := lst.next;
❚ lst.value := val;lst.next := temp
ENDEND Insert;
lst
A BC
val
temp
487
![Page 79: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/79.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE Insert* (VAR lst: CList; val: POINTER TO ANYREC);VAR
temp: CList;BEGIN
IF lst = NIL THENNEW(lst);lst.value := val;lst.next := lst
ELSEtemp := lst.next;NEW(lst.next);lst := lst.next;lst.value := val;
❚ lst.next := tempEND
END Insert;
lst
A BC
val
temp
487
![Page 80: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/80.jpg)
Computing Fundamentals Chapter 21 Linked Lists
Node = RECORDprev: CList;value: POINTER TO ANYREC;next: CList
END;Figure 21.21The structure of a record of type Node for a doubly-linked list.
value nextprev
488
![Page 81: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/81.jpg)
Computing Fundamentals Chapter 21 Linked Lists
lst
A B C
Figure 21.22A circular doubly-linked list that corresponds to the singly-linked list of Figure 21.11
489
![Page 82: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/82.jpg)
Computing Fundamentals Chapter 21 Linked Lists
lst
A B C
Figure 21.23Deleting a node from a doubly linked circular list with the list initially as in Figure 21.22.
489
![Page 83: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/83.jpg)
Computing Fundamentals Chapter 21 Linked Lists
TYPEComposer = RECORD
name: ARRAY 32 OF CHAR;birthYear: INTEGER
END;VAR
composerA, composerB: Composer;
❚composerA := composerB
Mozart 1756composerA
Bach 1685composerB
Figure 21.24Record assignment.
490
![Page 84: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/84.jpg)
Computing Fundamentals Chapter 21 Linked Lists
TYPEComposer = RECORD
name: ARRAY 32 OF CHAR;birthYear: INTEGER
END;VAR
composerA, composerB: Composer;
❚ composerA := composerB
Bach 1685composerA
Bach 1685composerB
Figure 21.24Record assignment.
490
![Page 85: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/85.jpg)
Computing Fundamentals Chapter 21 Linked Lists
List* = RECORDhead: POINTER TO Node
END;Node = RECORD
value: T;next: List
END;
(a) Node structure for List.
myList
Figure 21.25Diagrams for the node structure of List.
491
![Page 86: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/86.jpg)
Computing Fundamentals Chapter 21 Linked Lists
List* = RECORDhead: POINTER TO Node
END;Node = RECORD
value: T;next: List
END;
(a) Node structure for List.
myList
myList.head
Figure 21.25Diagrams for the node structure of List.
491
![Page 87: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/87.jpg)
Computing Fundamentals Chapter 21 Linked Lists
List* = RECORDhead: POINTER TO Node
END;Node = RECORD
value: T;next: List
END;
(a) Node structure for List.
myList
myList.head
Figure 21.25Diagrams for the node structure of List.
myList.head^
491
![Page 88: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/88.jpg)
Computing Fundamentals Chapter 21 Linked Lists
List* = RECORDhead: POINTER TO Node
END;Node = RECORD
value: T;next: List
END;
(a) Node structure for List.
myList
myList.head
myList.head.value
Figure 21.25Diagrams for the node structure of List.
myList.head^
491
![Page 89: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/89.jpg)
Computing Fundamentals Chapter 21 Linked Lists
List* = RECORDhead: POINTER TO Node
END;Node = RECORD
value: T;next: List
END;
(a) Node structure for List.
myList
myList.head
myList.head.value
myList.head.next
Figure 21.25Diagrams for the node structure of List.
myList.head^
491
![Page 90: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/90.jpg)
Computing Fundamentals Chapter 21 Linked Lists
List* = RECORDhead: POINTER TO Node
END;Node = RECORD
value: T;next: List
END;
(a) Node structure for List.
myList
myList.head
myList.head.value
myList.head.next
myList.head.next.head
Figure 21.25Diagrams for the node structure of List.
myList.head^
491
![Page 91: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/91.jpg)
Computing Fundamentals Chapter 21 Linked Lists
List* = RECORDhead: POINTER TO Node
END;Node = RECORD
value: T;next: List
END;
(a) Node structure for List.
myList
myList.head
myList.head.value
myList.head.next
myList.head.next.head
(b) Abbreviated diagram of the same structure as in (a).
Figure 21.25Diagrams for the node structure of List.
myList.head^
491
![Page 92: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/92.jpg)
Computing Fundamentals Chapter 21 Linked Lists
DEFINITION PboxLListObj;
TYPET = ARRAY 16 OF CHAR;List = RECORD
(VAR lst: List) Clear, NEW;(IN lst: List) Display, NEW;(IN lst: List) GetElementN (n: INTEGER; OUT val: T), NEW;(VAR lst: List) InsertAtN (n: INTEGER; IN val: T), NEW;(IN lst: List) Length (): INTEGER, NEW;(VAR lst: List) RemoveN (n: INTEGER), NEW;(IN lst: List) Search (IN srchVal: T; OUT n: INTEGER; OUT fnd: BOOLEAN), NEW
END;
END PboxLListObj.
Figure 21.26The interface of the linked list class PboxLListObj.
492
![Page 93: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/93.jpg)
Computing Fundamentals Chapter 21 Linked Lists
TYPE ListThe linked list class supplied by PboxLListObj.
TYPE TThe type of each element in the list, a string of at most 15 characters.
PROCEDURE (VAR lst: List) ClearPostList lst is initialized to the empty list.
PROCEDURE (IN lst: List) DisplayPostList lst is output to the Log, one element per line with each element preceded by its position.
PROCEDURE (IN lst: List) GetElementN (n: INTEGER; OUT val: T)Pre0 <= n 20n < lst.Length() 21Postval gets the data value of the element at position n of list lst.Note: 0 is the position of the first element in the list.
Figure 21.27The documentation of the linked list class PboxLListObj.
493
![Page 94: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/94.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN (n: INTEGER; IN val: T)Pre0 <= n 20Postval is inserted at position n in list lst, increasing lst.Length() by 1.If n > lst.Length(), val is appended to the list.
PROCEDURE (IN lst: List) Length (): INTEGERPostReturns the number of elements in list lst.
PROCEDURE (VAR lst: List) RemoveN (n: INTEGER)Pre0 <= n 20PostIf n < lst.Length(), the element at position n in list lst is removed.Otherwise, the list is unchanged.
PROCEDURE (IN lst: List) Search (IN srchVal: T; OUT n: INTEGER; OUT fnd: BOOLEAN)PostIf srchVal is in list lst, fnd is set to TRUE and n is set to the first position where srchVal is found.Otherwise, fnd is set to FALSE and n is undefined.
493
![Page 95: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/95.jpg)
Computing Fundamentals Chapter 21 Linked Lists
Figure 21.28The dialog box for manipulating two lists.
494
![Page 96: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/96.jpg)
Computing Fundamentals Chapter 21 Linked Lists
MODULE Pbox21E;IMPORT Dialog, PboxLListObj, PboxStrings;
TYPEString32 = ARRAY 32 OF CHAR;
VARd*: RECORD
insertT*: PboxLListObj.T; insertPosition*: INTEGER;removePosition*: INTEGER;searchT*: PboxLListObj.T; searchPosition-: String32;retrievePosition*: INTEGER; retrieveT-: PboxLListObj.T;numItemsA-, numItemsB-: INTEGER;
END;listA, listB: PboxLListObj.List;
Figure 21.29The program for the dialog box of Figure 21.28.
494
![Page 97: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/97.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE InsertAtA*;BEGIN
listA.InsertAtN(d.insertPosition, d.insertT);d.numItemsA := listA.Length();Dialog.Update(d)
END InsertAtA;
PROCEDURE InsertAtB*;BEGIN
listB.InsertAtN(d.insertPosition, d.insertT);d.numItemsB := listB.Length();Dialog.Update(d)
END InsertAtB;
495
![Page 98: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/98.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE RemoveFromA*;BEGIN
listA.RemoveN(d.removePosition);d.numItemsA := listA.Length();Dialog.Update(d)
END RemoveFromA;
PROCEDURE RemoveFromB*;BEGIN
listB.RemoveN(d.removePosition);d.numItemsB := listB.Length();Dialog.Update(d)
END RemoveFromB;
495
![Page 99: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/99.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE SearchForA*;VAR
found: BOOLEAN;position: INTEGER;
BEGINlistA.Search(d.searchT, position, found);IF found THEN
PboxStrings.IntToString(position, 1, d.searchPosition);d.searchPosition := "At position " + d.searchPosition + "."
ELSEd.searchPosition := "Not in list."
END;Dialog.Update(d)
END SearchForA;
PROCEDURE SearchForB*;VAR
found: BOOLEAN;position: INTEGER;
BEGINlistB.Search(d.searchT, position, found);IF found THEN
PboxStrings.IntToString(position, 1, d.searchPosition);d.searchPosition := "At position " + d.searchPosition + "."
ELSEd.searchPosition := "Not in list."
END;Dialog.Update(d)
END SearchForB;
495
![Page 100: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/100.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE RetrieveFromA*;BEGIN
listA.GetElementN(d.retrievePosition, d.retrieveT);Dialog.Update(d)
END RetrieveFromA;
PROCEDURE RetrieveFromB*;BEGIN
listB.GetElementN(d.retrievePosition, d.retrieveT);Dialog.Update(d)
END RetrieveFromB;
496
![Page 101: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/101.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE DisplayListA*;BEGIN
listA.Display()END DisplayListA;
PROCEDURE DisplayListB*;BEGIN
listB.Display()END DisplayListB;
496
![Page 102: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/102.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE ClearLists*;BEGIN
listA.Clear; listB.Clear;d.insertT := ""; d.insertPosition := 0;d.removePosition := 0;d.searchT := ""; d.searchPosition := "";d.retrievePosition := 0; d.retrieveT := "";d.numItemsA := 0; d.numItemsB := 0;Dialog.Update(d)
END ClearLists;
BEGINClearLists
END Pbox21E.
496
![Page 103: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/103.jpg)
Computing Fundamentals Chapter 21 Linked Lists
MODULE PboxLListObj;IMPORT StdLog;
TYPET* = ARRAY 16 OF CHAR;List* = RECORD
head: POINTER TO NodeEND;Node = RECORD
value: T;next: List
END;
PROCEDURE (VAR lst: List) Clear*, NEW;BEGIN
lst.head := NILEND Clear;
Figure 21.30Implementation of the linked list class that is used in Figure 21.29.
498
![Page 104: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/104.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (IN lst: List) Display*, NEW;VAR
p: List;i: INTEGER;
BEGINi := 0;p := lst;WHILE p.head # NIL DO
StdLog.Int(i); StdLog.String(" "); StdLog.String(p.head.value); StdLog.Ln;INC(i);p := p.head.next
ENDEND Display;
498
![Page 105: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/105.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (IN lst: List) GetElementN* (n: INTEGER; OUT val: T), NEW;VAR
p: List;i: INTEGER;
BEGINASSERT(0 <= n, 20);p := lst;FOR i := 1 TO n DO
ASSERT(p.head # NIL, 21);p := p.head.next
END;ASSERT(p.head # NIL, 21);val := p.head.value
END GetElementN;
498
![Page 106: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/106.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List;i: INTEGER;
BEGINASSERT(0 <= n, 20);IF (n = 0) OR (lst.head = NIL) THEN (* Insert at beginning *)
p := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSEi := 1;prev := lst;p := lst.head.next;WHILE (i < n) & (p.head # NIL) DO
INC(i);prev := p;p := p.head.next
END;NEW(prev.head.next.head);prev.head.next.head.value := val;prev.head.next.head.next := p
ENDEND InsertAtN;
499
![Page 107: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/107.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (IN lst: List) Length* (): INTEGER, NEW;BEGIN
(* A problem for the student *)RETURN 999
END Length;
PROCEDURE (VAR lst: List) RemoveN* (n: INTEGER), NEW;BEGIN
(* A problem for the student *)END RemoveN;
PROCEDURE (IN lst: List) Search* (IN srchVal: T; OUT n: INTEGER; OUT fnd: BOOLEAN), NEW;BEGIN
(* A problem for the student *)fnd := FALSE
END Search;
END PboxLListObj.
499
![Page 108: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/108.jpg)
Computing Fundamentals Chapter 21 Linked Lists
(a) Before call to GetElementN
Figure 21.31Memory allocation when method GetElementN is called.
ThislistA is fun.
501
![Page 109: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/109.jpg)
Computing Fundamentals Chapter 21 Linked Lists
1
(b) Call listA.GetElementN(d.retrievePosition, d.retrieveT)
n
lst
val
retAddr
Figure 21.31Memory allocation when method GetElementN is called.
p
i
ThislistA is fun.
501
![Page 110: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/110.jpg)
Computing Fundamentals Chapter 21 Linked Lists
Figure 21.31Memory allocation when method GetElementN is called.
(c) Abbreviated version of (b)
Thislst is fun.
i
p
501
![Page 111: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/111.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (IN lst: List) GetElementN* (n: INTEGER; OUT val: T), NEW;VAR
p: List; n val ii: INTEGER; 1
❚ BEGINASSERT(0 <= n, 20);p := lst;FOR i := 1 TO n DO
ASSERT(p.head # NIL, 21);p := p.head.next
END;ASSERT(p.head # NIL, 21);val := p.head.value
END GetElementN;
Thislst is fun.
p
502
![Page 112: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/112.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (IN lst: List) GetElementN* (n: INTEGER; OUT val: T), NEW;VAR
p: List; n val ii: INTEGER; 1
BEGINASSERT(0 <= n, 20);
❚ p := lst;FOR i := 1 TO n DO
ASSERT(p.head # NIL, 21);p := p.head.next
END;ASSERT(p.head # NIL, 21);val := p.head.value
END GetElementN;
Thislst is fun.
p
502
![Page 113: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/113.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (IN lst: List) GetElementN* (n: INTEGER; OUT val: T), NEW;VAR
p: List; n val ii: INTEGER; 1 1
BEGINASSERT(0 <= n, 20);p := lst;
❚ FOR i := 1 TO n DOASSERT(p.head # NIL, 21);p := p.head.next
END;ASSERT(p.head # NIL, 21);val := p.head.value
END GetElementN;
Thislst is fun.
p
502
![Page 114: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/114.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (IN lst: List) GetElementN* (n: INTEGER; OUT val: T), NEW;VAR
p: List; n val ii: INTEGER; 1 1
BEGINASSERT(0 <= n, 20);p := lst;FOR i := 1 TO n DO
ASSERT(p.head # NIL, 21);❚ p := p.head.next
END;ASSERT(p.head # NIL, 21);val := p.head.value
END GetElementN;
Thislst is fun.
p
502
![Page 115: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/115.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (IN lst: List) GetElementN* (n: INTEGER; OUT val: T), NEW;VAR
p: List; n val ii: INTEGER; 1 1
BEGINASSERT(0 <= n, 20);p := lst;
❚ FOR i := 1 TO n DOASSERT(p.head # NIL, 21);p := p.head.next
END;ASSERT(p.head # NIL, 21);val := p.head.value
END GetElementN;
Thislst is fun.
p
502
![Page 116: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/116.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (IN lst: List) GetElementN* (n: INTEGER; OUT val: T), NEW;VAR
p: List; n val ii: INTEGER; 1 is 1
BEGINASSERT(0 <= n, 20);p := lst;FOR i := 1 TO n DO
ASSERT(p.head # NIL, 21);p := p.head.next
END;ASSERT(p.head # NIL, 21);
❚ val := p.head.valueEND GetElementN;
Thislst is fun.
p
502
![Page 117: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/117.jpg)
Computing Fundamentals Chapter 21 Linked Lists
Figure 21.32A trace of procedure GetElementN.
(a) p := lst
(b) FOR i := 1 TO n DO (c) p := p.head.next
Thislst is fun.
i 1
p
Thislst is fun.
i
p
Thislst is fun.
i 1
p
502
![Page 118: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/118.jpg)
Computing Fundamentals Chapter 21 Linked Lists
In the assignment statement
p := p.head.next
the relevant types are
■ p is a record (which is also a List)
■ p.head is a pointer to a Node
■ p.head.next is a record (which is also a List)
503
![Page 119: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/119.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List; n val ii: INTEGER; 2 such
❚ BEGINASSERT(0 <= n, 20);IF (n = 0) OR (lst.head = NIL) THEN
p := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSEi := 1;prev := lst;p := lst.head.next;WHILE (i < n) & (p.head # NIL) DO
INC(i);prev := p;p := p.head.next
END;NEW(prev.head.next.head);prev.head.next.head.value := val;prev.head.next.head.next := p
ENDEND InsertAtN;
Thislst is fun.
p
prev
504
![Page 120: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/120.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List; n val ii: INTEGER; 2 such
BEGINASSERT(0 <= n, 20);
❚ IF (n = 0) OR (lst.head = NIL) THENp := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSEi := 1;prev := lst;p := lst.head.next;WHILE (i < n) & (p.head # NIL) DO
INC(i);prev := p;p := p.head.next
END;NEW(prev.head.next.head);prev.head.next.head.value := val;prev.head.next.head.next := p
ENDEND InsertAtN;
Thislst is fun.
p
prev
504
![Page 121: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/121.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List; n val ii: INTEGER; 2 such 1
BEGINASSERT(0 <= n, 20);IF (n = 0) OR (lst.head = NIL) THEN
p := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSE❚ i := 1;
prev := lst;p := lst.head.next;WHILE (i < n) & (p.head # NIL) DO
INC(i);prev := p;p := p.head.next
END;NEW(prev.head.next.head);prev.head.next.head.value := val;prev.head.next.head.next := p
ENDEND InsertAtN;
Thislst is fun.
p
prev
504
![Page 122: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/122.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List; n val ii: INTEGER; 2 such 1
BEGINASSERT(0 <= n, 20);IF (n = 0) OR (lst.head = NIL) THEN
p := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSEi := 1;
❚ prev := lst;p := lst.head.next;WHILE (i < n) & (p.head # NIL) DO
INC(i);prev := p;p := p.head.next
END;NEW(prev.head.next.head);prev.head.next.head.value := val;prev.head.next.head.next := p
ENDEND InsertAtN;
Thislst is fun.
p
prev
504
![Page 123: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/123.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List; n val ii: INTEGER; 2 such 1
BEGINASSERT(0 <= n, 20);IF (n = 0) OR (lst.head = NIL) THEN
p := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSEi := 1;prev := lst;
❚ p := lst.head.next;WHILE (i < n) & (p.head # NIL) DO
INC(i);prev := p;p := p.head.next
END;NEW(prev.head.next.head);prev.head.next.head.value := val;prev.head.next.head.next := p
ENDEND InsertAtN;
Thislst is fun.
p
prev
504
![Page 124: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/124.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List; n val ii: INTEGER; 2 such 1
BEGINASSERT(0 <= n, 20);IF (n = 0) OR (lst.head = NIL) THEN
p := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSEi := 1;prev := lst;p := lst.head.next;
❚ WHILE (i < n) & (p.head # NIL) DOINC(i);prev := p;p := p.head.next
END;NEW(prev.head.next.head);prev.head.next.head.value := val;prev.head.next.head.next := p
ENDEND InsertAtN;
Thislst is fun.
p
prev
504
![Page 125: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/125.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List; n val ii: INTEGER; 2 such 2
BEGINASSERT(0 <= n, 20);IF (n = 0) OR (lst.head = NIL) THEN
p := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSEi := 1;prev := lst;p := lst.head.next;WHILE (i < n) & (p.head # NIL) DO
❚ INC(i);prev := p;p := p.head.next
END;NEW(prev.head.next.head);prev.head.next.head.value := val;prev.head.next.head.next := p
ENDEND InsertAtN;
Thislst is fun.
p
prev
504
![Page 126: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/126.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List; n val ii: INTEGER; 2 such 2
BEGINASSERT(0 <= n, 20);IF (n = 0) OR (lst.head = NIL) THEN
p := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSEi := 1;prev := lst;p := lst.head.next;WHILE (i < n) & (p.head # NIL) DO
INC(i);❚ prev := p;
p := p.head.nextEND;NEW(prev.head.next.head);prev.head.next.head.value := val;prev.head.next.head.next := p
ENDEND InsertAtN;
Thislst is fun.
p
prev
504
![Page 127: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/127.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List; n val ii: INTEGER; 2 such 2
BEGINASSERT(0 <= n, 20);IF (n = 0) OR (lst.head = NIL) THEN
p := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSEi := 1;prev := lst;p := lst.head.next;WHILE (i < n) & (p.head # NIL) DO
INC(i);prev := p;
❚ p := p.head.nextEND;NEW(prev.head.next.head);prev.head.next.head.value := val;prev.head.next.head.next := p
ENDEND InsertAtN;
Thislst is fun.
p
prev
504
![Page 128: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/128.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List; n val ii: INTEGER; 2 such 2
BEGINASSERT(0 <= n, 20);IF (n = 0) OR (lst.head = NIL) THEN
p := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSEi := 1;prev := lst;p := lst.head.next;
❚ WHILE (i < n) & (p.head # NIL) DOINC(i);prev := p;p := p.head.next
END;NEW(prev.head.next.head);prev.head.next.head.value := val;prev.head.next.head.next := p
ENDEND InsertAtN;
Thislst is fun.
p
prev
504
![Page 129: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/129.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List; n val ii: INTEGER; 2 such 2
BEGINASSERT(0 <= n, 20);IF (n = 0) OR (lst.head = NIL) THEN
p := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSEi := 1;prev := lst;p := lst.head.next;WHILE (i < n) & (p.head # NIL) DO
INC(i);prev := p;p := p.head.next
END;❚ NEW(prev.head.next.head);
prev.head.next.head.value := val;prev.head.next.head.next := p
ENDEND InsertAtN;
Thislst is fun.
p
prev
504
![Page 130: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/130.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List; n val ii: INTEGER; 2 such 2
BEGINASSERT(0 <= n, 20);IF (n = 0) OR (lst.head = NIL) THEN
p := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSEi := 1;prev := lst;p := lst.head.next;WHILE (i < n) & (p.head # NIL) DO
INC(i);prev := p;p := p.head.next
END;NEW(prev.head.next.head);
❚ prev.head.next.head.value := val;prev.head.next.head.next := p
ENDEND InsertAtN;
Thislst is fun.
p
prev such
504
![Page 131: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/131.jpg)
Computing Fundamentals Chapter 21 Linked Lists
PROCEDURE (VAR lst: List) InsertAtN* (n: INTEGER; IN val: T), NEW;VAR
prev, p: List; n val ii: INTEGER; 2 such 2
BEGINASSERT(0 <= n, 20);IF (n = 0) OR (lst.head = NIL) THEN
p := lst;NEW(lst.head);lst.head.value := val;lst.head.next := p
ELSEi := 1;prev := lst;p := lst.head.next;WHILE (i < n) & (p.head # NIL) DO
INC(i);prev := p;p := p.head.next
END;NEW(prev.head.next.head);prev.head.next.head.value := val;
❚ prev.head.next.head.next := pEND
END InsertAtN;
Thislst is fun.
p
prev such
504
![Page 132: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/132.jpg)
Computing Fundamentals Chapter 21 Linked Lists
(a) i := 1; prev := lst; p := lst.head.next (b) INC(i); prev := p
(c) p := p.head.next (d) NEW(prev.head.next.head)
(e) prev.head.next.head.value := val (f) prev.head.next.head.next := p
Thislst is fun.
p
prev such
This is fun.
such
Thislst is fun.
p
prev
This is fun.
Thislst is fun.
p
prev
This is fun.lst
p
prev
lst
p
prev
lst
p
prev
Figure 21.33Execution of procedure InsertAtN to insert the word “such” at position 2.
504
![Page 133: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/133.jpg)
Computing Fundamentals Chapter 21 Linked Lists
(a) Initialize p and prev.
Thislst stuff fun.
prev
p
is not
Figure 21.34Deleting a node in a linked list.
507
![Page 134: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/134.jpg)
Computing Fundamentals Chapter 21 Linked Lists
(b) Find the node to delete.
Thislst stuff fun.
prev
p
is not
Figure 21.34Deleting a node in a linked list.
507
![Page 135: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/135.jpg)
Computing Fundamentals Chapter 21 Linked Lists
(c) Unlink the node from the list.
Thislst stuff fun.
prev
p
is not
Figure 21.34Deleting a node in a linked list.
507
![Page 136: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/136.jpg)
Computing Fundamentals Chapter 21 Linked Lists
Figure 21.35Developing a server module.
Server, version 1Client
Disk
Server, version 1
Main memory
(a) Server module loads.
508
![Page 137: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/137.jpg)
Computing Fundamentals Chapter 21 Linked Lists
Figure 21.35Developing a server module.
Disk Main memory
Server, version 1Client
Server, version 1Client
(b) Client module loads.
508
![Page 138: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/138.jpg)
Computing Fundamentals Chapter 21 Linked Lists
Figure 21.35Developing a server module.
Disk Main memory
Server, version 2Client
Server, version 1Client
(c) Compile and Unload Server, version 2. Unloading fails.
508
![Page 139: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/139.jpg)
Computing Fundamentals Chapter 21 Linked Lists
Figure 21.35Developing a server module.
Disk Main memory
Server, version 2Client
Server, version 1
(d) Client must be unloaded first.
508
![Page 140: Linked Lists - Pepperdine University€¦ · 21 Linked Lists The procedure NEW is a standard Component Pascal procedure that does two things: It allocates storage from the heap. Because](https://reader035.vdocument.in/reader035/viewer/2022063012/5fca1b969c92580f34513db5/html5/thumbnails/140.jpg)
Computing Fundamentals Chapter 21 Linked Lists
Figure 21.35Developing a server module.
Disk Main memory
Server, version 2Client
(e) Then Server, version 1 can be unloaded.
508