Embed
Email

Lists

Document Sample

Shared by: dffhrtcv3
Categories
Tags
Stats
views:
0
posted:
2/1/2012
language:
pages:
23
More on Lists



CSE 373

Data Structures

Lecture 4

Alternative Addition

• Use an auxiliary function

› AddAux(p,q : node pointer, cb : integer)

which returns the result of adding p and q

and the carry/borrow cb.

› Add(p,q) := AddAux(p,q,0)

› Advantage: more like what we learned in

grade school (and more like actual binary

adders in hardware).



12/26/03 More on Lists - Lecture 4 2

Auxiliary Addition

• Positive numbers (or negative numbers)

0 0 1

3427 7 342

+898 +8 +89

5 Recursive call

10









12/26/03 More on Lists - Lecture 4 3

Auxiliary Addition

• Mixed numbers

0 0 -1

3427 7 342

-898 -8 -89

9 Recursive call

-10









12/26/03 More on Lists - Lecture 4 4

Copy

• Design a recursive algorithm to make a

copy of a linked list (like the one used

for long integers)

Copy(p : node pointer) : node pointer {

???

}



next value

node





12/26/03 More on Lists - Lecture 4 5

Comparing Long Integers

IsZero(p : node pointer) : boolean { //p points to the sign node

return p.next = null;

}

IsPositive(p: node pointer) : boolean {//p points to the sign node

return not IsZero(p) and p.value = 1;

}

Negate(p : node pointer) : node pointer { //destructive

if p.value = 1 then p.value := -1

else p.value := 1;

return p;

}

LessThan(p,q :node pointer) : boolean { // non destructive

p1,q1 : node pointer;

p1 := Copy(p); q1 := Copy(q);

return IsPositive(Add(q1,Negate(p1)); // x < y iff 0 < y – x

//We assume Add and Negate are destructive

}



12/26/03 More on Lists - Lecture 4 6

List Mergesort

• Overall sorting plan

sort





split into equal size lists

sort recursively sort recursively



merge into one sorted list









12/26/03 More on Lists - Lecture 4 7

Mergesort pseudocode

Mergesort(p : node pointer) : node pointer {

Case {

p = null : return p; //no elements

p.next = null : return p; //one element

else

d : duo pointer; // duo has two fields first,second

d := Split(p);

return Merge(Mergesort(d.first),Mergesort(d.second));

}

}

duo

first

Note: Mergesort is destructive. second





12/26/03 More on Lists - Lecture 4 8

Split

Split(p : node pointer) : duo pointer {

d : duo pointer;

Case {

p = null : d := new duo; return d//both fields are null

p.next = null : d := new duo; d.first := p ; return d

//d.second is null

else :

d := Split(p.next.next);

p.next.next := d.first;

d.first := p.next;

p.next := d.second;

d.second := p;

return d;

}

}

12/26/03 More on Lists - Lecture 4 9

Split Example

p



a b c d e f g h null



1st call to split 2nd call to split Last call to split



After recursive call to Split



p

d d f h null



a b

c e g null







12/26/03 More on Lists - Lecture 4 10

Split Example

p



a b c d e f g h null







After recursive call to Split



p

d d f h null



a b

c e g null







12/26/03 More on Lists - Lecture 4 11

Split Example

p

d 2 d f h null



a b

3 4

1

c e g null









p

d d f h null



a b

c e g null





12/26/03 More on Lists - Lecture 4 12

Merge

Merge(p,q : node pointer): node pointer{

case {

p = null : return q;

q = null : return p;

LessThan(p.value,q.value) :

p.next := Merge(p.next,q);

return p;

else :

q.next := Merge(p,q.next);

return q;

}

}









12/26/03 More on Lists - Lecture 4 13

Merge Example

merge

p

4 9 20 30 null







q

3 13 17 19 null









12/26/03 More on Lists - Lecture 4 14

Merge Example

merge

merge

p

4 9 20 30 null







q

3 13 17 19 null









12/26/03 More on Lists - Lecture 4 15

Merge Example

merge

merge return



4 9 20 30 null







q

3 13 17 19









12/26/03 More on Lists - Lecture 4 16

Implementing Pointers in Arrays

– “Cursor Implementation”

• This is needed in languages like

Fortran, Basic, and assembly language

• Easiest when number of records is

known ahead of time.

• Each record field of a basic type is

associated with an array.

• A pointer field is an unsigned integer

indicating an array index.

12/26/03 More on Lists - Lecture 4 17

Idea

Pointer World Nonpointer World

D N

n nodes • D[ ] : basic type array

1

• N[ ] : integer array

2

data next • Pointer is an integer

3

• null is 0

4

• p.data is D[p]

5

• p.next is N[p]

data : basic type .

• Free list needed for node

next : node pointer .

allocation

.

n





12/26/03 More on Lists - Lecture 4 18

Initialization

Free = n null

D N D N

1 0 1

2 1 2

3 2 3

4 3 means 4

5 4 5

. .

. .

. .

n n-1 n



Free

12/26/03 More on Lists - Lecture 4 19

Example of Use

L

a b c null



n=8

L=4 D N

Free = 7 InsertFront(L : integer, x : basic type) {

1 3

q : integer;

2 c 0

if not(Free = 0) then q := Free

3 0 else return “overflow”;

4 a 6 Free := N[Free];

5 8 D[q] := x;

N[q] := L;

6 b 2

L := q;

7 5 }

8 1





12/26/03 More on Lists - Lecture 4 20

Try DeleteFront

• Define the cursor implementation of

DeleteFront which removes the first

member of the list when there is one.

› Remember to add garbage to free list.





DeleteFront(L : integer) {

???

}



12/26/03 More on Lists - Lecture 4 21

Copy Solution



Copy(p : node pointer) : node pointer {

if p = null then return null

else {

q : node pointer;

q := new node; //by convention the value

//field is 0 and the

//pointer field is null

q.value := p.value;

q.next := Copy(p.next);

return q;

}

}

12/26/03 More on Lists - Lecture 4 22

DeleteFront Solution



DeleteFront(L : integer) {

q : integer;

if L = 0 then return “underflow”

else {

q := L;

L := N[L];

N[q] := Free;

Free := q;

}

}







12/26/03 More on Lists - Lecture 4 23



Related docs
Other docs by dffhrtcv3
Chromosomal Miss-Segregation and DNA Damage
Views: 23  |  Downloads: 0
Christmas
Views: 21  |  Downloads: 0
Christmas Party Counting
Views: 19  |  Downloads: 0
Christmas dishes
Views: 19  |  Downloads: 0
CHRISTIAS FOR BIBLICAL ISRAEL or CFBI
Views: 20  |  Downloads: 0
Christian Ethics Living a Responsible Life
Views: 20  |  Downloads: 0
Christian Duty - Seymour Church of Christ
Views: 20  |  Downloads: 0
Chp 9 Power Point 08-09
Views: 19  |  Downloads: 0
Choose Your Own Adventure 2
Views: 20  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!