23
1 Copyright © 2001 [email protected] Java: Otras secuencias / 1 2WURVWLSRVGHVHFXHQFLDV &DUORV’HOJDGR.ORRV ,QJHQLHUtD7HOHPiWLFD 8QLY&DUORV,,,GH0DGULG Copyright © 2001 [email protected] Java: Otras secuencias / 2 2WURVWLSRV GHVHFXHQFLDV &RODVGREOHV &RODVFRQSULRULGDG 6HFXHQFLDVHQJHQHUDO &DGHQDV

2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 [email protected] Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

1

Copyright © 2001 [email protected] Java: Otras secuencias / 1

2WURV�WLSRV�GH�VHFXHQFLDV

&DUORV�'HOJDGR�.ORRV

,QJHQLHUtD�7HOHPiWLFD

8QLY��&DUORV�,,,�GH�0DGULG

Copyright © 2001 [email protected] Java: Otras secuencias / 2

2WURV�WLSRV

GH�VHFXHQFLDV

❚ &RODV�GREOHV

❚ &RODV�FRQ�SULRULGDG

❚ 6HFXHQFLDV�HQ�JHQHUDO

❚ &DGHQDV

Page 2: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

2

Copyright © 2001 [email protected] Java: Otras secuencias / 3

'HTXHV��FRODV�GREOHV�

insertFirst

removeFirst

removeLast

insertLast

first last

Copyright © 2001 [email protected] Java: Otras secuencias / 4

,QWHUID]�SDUD

FRODV�GREOHV

public interface Deque {

public int size();

public boolean isEmpty();

public void insertFirst(Object o);

public void insertLast(Object o);

Page 3: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

3

Copyright © 2001 [email protected] Java: Otras secuencias / 5

,QWHUID]�SDUD

FRODV�GREOHV

public Object removeFirst()throws DequeEmptyException;

public Object removeLast()throws DequeEmptyException;

public Object first()throws DequeEmptyException;

public Object last()throws DequeEmptyException;

}

Copyright © 2001 [email protected] Java: Otras secuencias / 6

3LODV�\�FRODV

FRPR�GHTXHV

removeLast()pop()

insertLast(e)push(e)

last()top()

isEmpty()isEmpty()

size()size()

'HTXH6WDFN

removeFirst()dequeue()

insertLast(e)enqueue(e)

first()front()

isEmpty()isEmpty()

size()size()

'HTXH4XHXH

Page 4: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

4

Copyright © 2001 [email protected] Java: Otras secuencias / 7

'HILQLFLyQ�GH�SLODV

D�SDUWLU�GH�GHTXHV

public class DequeStackimplements Stack {

private Deque D;

public DequeStack()

{D=new MyDeque();}

public int size()

{return D.size();}

public boolean isEmpty()

{return D.isEmpty();}

Copyright © 2001 [email protected] Java: Otras secuencias / 8

'HILQLFLyQ�GH�SLODV

D�SDUWLU�GH�GHTXHV

public void push(Object o){ D.insertLast(o);}

public Object pop()throws StackEmptyException {try {return D.removeLast();}catch (DequeEmptyException ece) {throw new

StackEmptyException("vacia");}

}

Page 5: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

5

Copyright © 2001 [email protected] Java: Otras secuencias / 9

'HILQLFLyQ�GH�SLODV

D�SDUWLU�GH�GHTXHV

public Object top()

throws StackEmptyException {

try {return D.last();}

catch (DequeEmptyException ece)

{throw new

StackEmptyException("vacia");}}

}

Copyright © 2001 [email protected] Java: Otras secuencias / 10

/LVWDV�GREOH�

PHQWH�HQOD]DGDV

Madrid Miami Múnich

Page 6: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

6

Copyright © 2001 [email protected] Java: Otras secuencias / 11

1RGR

class DLNode {

private Object elem;

private DLNode next, prev;

DLNode() {this(null, null, null);}

DLNode(Object e, DLNode p, DLNode n) {elem=e; next=n; prev=p;}

Copyright © 2001 [email protected] Java: Otras secuencias / 12

1RGR

void setElem(Object e) {elem=e;}

void setNext(DLNode n) {next=n;}

void setPrev(DLNode p) {prev=p;}

Object getElem() {return elem;}

DLNode getNext() {return next;}

DLNode getPrev() {return prev;}

}

Page 7: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

7

Copyright © 2001 [email protected] Java: Otras secuencias / 13

,PSOHPHQWDFLyQ

EDVDGD�HQ�'/1RGH

public class DLDeque implements Deque {private DLNode top, tail;

private int size;

public DLDeque() {

top=new DLNode(); tail=new DLNode();top.setElem(null); tail.setElem(null);

top.setPrev(null); tail.setPrev(top);

top.setNext(tail); tail.setPrev(null);

size=0;}

Copyright © 2001 [email protected] Java: Otras secuencias / 14

,PSOHPHQWDFLyQ

EDVDGD�HQ�OLVWDV

public void insertFirst(Object e) {

DLNode second=top.getNext();

DLNode first=newDLNode(e,top,second);

second.setPrev(first);

top.setNext(first);

size++;

}

Page 8: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

8

Copyright © 2001 [email protected] Java: Otras secuencias / 15

,QVHUFLyQ

Madrid Miami Múnich

Moscú

first

second

top tail

Copyright © 2001 [email protected] Java: Otras secuencias / 16

,PSOHPHQWDFLyQ

EDVDGD�HQ�OLVWDV

public Object removeFirst()throws DequeEmptyException {

if (isEmpty())

throw new DequeEmptyException("vacia");

DLNode first=top.getNext();

Object temp=first.getElem();DLNode second=first.getNext();

top.setNext(second);

second.setPrev(top);

size--;return temp;

}

Page 9: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

9

Copyright © 2001 [email protected] Java: Otras secuencias / 17

%RUUDGR

Madrid Miami MúnichMoscú

firsttop second tail

Copyright © 2001 [email protected] Java: Otras secuencias / 18

&RODV�FRQ�SULRULGDG

❚ 8QD�FROD�FRQ�SULRULGDG�HVXQD�HVWUXFWXUD�GH�GDWRV�OLQHDO�TXH�GHYXHOYH�ORV�HOHPHQWRV�GH�DFXHUGR�DXQ�YDORU�DVRFLDGR�D�HOORV��FODYH��\�QR�DO�RUGHQ�HQ�TXH�IXHURQ�LQVHUWDGRV��

❚ /D�FODYH�GH�FRPSDUDFLyQ�SXHGH�FRLQFLGLU�FRQ�HO�YDORU�GHO�HOHPHQWR��SHUR�WDPELpQ�SXHGH�GLIHULU�GH�pO�

Page 10: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

10

Copyright © 2001 [email protected] Java: Otras secuencias / 19

,QWHUID]

public interface PriQueue {

public int size();

public boolean isEmpty();

public void insertItem(Object k,e);

public Object minElem()throws PriQueueEmptyException;

public Object removeMinElem()throws PriQueueEmptyException;

public Object minKey()throws PriQueueEmptyException;

}

Copyright © 2001 [email protected] Java: Otras secuencias / 20

(MHPSOR

2 1

3 2 4 1 5

2 1 3

2 1

+ + + – + – + –+ + + – + – + –

4 533

Page 11: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

11

Copyright © 2001 [email protected] Java: Otras secuencias / 21

(MHPSOR

2 1

3 2 4 1 5

2 1 3

2 1

+ + + – + – + –+ + + – + – + –

4 533

minminmin

Copyright © 2001 [email protected] Java: Otras secuencias / 22

(MHPSOR

2 5

3 2 4 1 5

2 1 3

2

+ + + – + – + –+ + + – + – + –

11 33 4

inserta en ordeninserta en ordeninserta en ordeninserta en ordeninserta en orden

Page 12: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

12

Copyright © 2001 [email protected] Java: Otras secuencias / 23

,PSOHPHQWDFLRQHV

❚ &RQ�XQD�VHFXHQFLD�VLQ�RUGHQDU

❙ ,QVHUFLyQ�IiFLO

❙ &RPSDUDFLyQ�DO�H[WUDHU

❚ &RQ�XQD�VHFXHQFLD�RUGHQDGD

❙ &RPSDUDFLyQ�DO�LQVHUWDU

❙ ([WUDFFLyQ�IiFLO

Copyright © 2001 [email protected] Java: Otras secuencias / 24

6HFXHQFLDV��HQ�JHQHUDO�

❚ &RQWHPSODPRV�VHFXHQFLDV�HQ�JHQHUDO

❚ ,QVHUFLyQ�HQ�FXDOTXLHU�SDUWH

❚ ([WUDFFLyQ�GH�FXDOTXLHU�SDUWH

Page 13: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

13

Copyright © 2001 [email protected] Java: Otras secuencias / 25

6HFXHQFLDV��HQ�JHQHUDO�

❚ 'DPRV�GRV�GHILQLFLRQHV

❙ %DVDGD�HQ��UDQNV� �SRVLFLRQHV�RUGHQDGDV�❘ 1R�SUHVXSRQH�LPSOHPHQWDFLyQ�EDVDGD�HQ�DUUD\V

❙ %DVDGD�HQ��SRVLWLRQV� �OXJDUHV�DEVWUDFWRV�❘ 1R�SUHVXSRQH�LPSOHPHQWDFLyQ�EDVDGD�HQ�OLVWDV�HQOD]DGDV

Copyright © 2001 [email protected] Java: Otras secuencias / 26

6HFXHQFLDV

EDVDGDV�HQ�SRVLFLRQHV

public interface RankedSeq {...;public Object elemAtRank

(int r) throws RankException;

public void insertElemAtRank

(int r, Object e) throws RankException;

public Object removeElemAtRank(int r) throws RankException;

public Object replaceElemAtRank(int r, Object e) throws RankException;

}

Page 14: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

14

Copyright © 2001 [email protected] Java: Otras secuencias / 27

,PSOHPHQWDFLyQ

FRQ�DUUD\V��,QVHUFLyQ

S

0 1 2 N-13 4 5

1 2 3 4 5

insertElemAtRank(2,6)

3 4 56

O(n)

Copyright © 2001 [email protected] Java: Otras secuencias / 28

3 4 56

,PSOHPHQWDFLyQ

FRQ�DUUD\V��%RUUDGR

S

0 1 2 N-13 4 5

1 2

removeElemAtRank(2)

3 4 5

O(n)

Page 15: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

15

Copyright © 2001 [email protected] Java: Otras secuencias / 29

,PSOHPHQWDFLyQ

FRQ�OLVWDV��,QVHUFLyQ

Madrid MiamiMúnich

Moscú

Copyright © 2001 [email protected] Java: Otras secuencias / 30

,PSOHPHQWDFLyQ

FRQ�OLVWDV��%RUUDGR

Madrid MiamiMúnichMoscú

Page 16: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

16

Copyright © 2001 [email protected] Java: Otras secuencias / 31

6HFXHQFLDV

EDVDGDV�HQ�OXJDUHV

❚ /RV�OXJDUHV�VRQ�FRQWHQHGRUHV�GH�GDWRV

1

23

Copyright © 2001 [email protected] Java: Otras secuencias / 32

/XJDUHV

public interface Position {

public Object element()

throws InvPosException;

public Sequence container()

throws InvPosException;

}1

23

Page 17: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

17

Copyright © 2001 [email protected] Java: Otras secuencias / 33

6HFXHQFLDV

EDVDGDV�HQ�OXJDUHV

public interface PosSeq {

public Position first()

throws EmptyException;

public Position last()

throws EmptyException;

public Position before(Position p)

throws BoundException;

public Position after(Position p)

throws BoundException;

Copyright © 2001 [email protected] Java: Otras secuencias / 34

6HFXHQFLDV

EDVDGDV�HQ�OXJDUHV

public Position insertFirst

(Object e);

public Position insertLast

(Object e);

public Position insertBefore

(Position p, Object e);

public Position insertAfter

(Position p, Object e);

Page 18: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

18

Copyright © 2001 [email protected] Java: Otras secuencias / 35

6HFXHQFLDV

EDVDGDV�HQ�OXJDUHV

public Object replace

(Position p, Object e);

public void swap

(Position p, Position q);

public Object remove

(Position p);

}

Copyright © 2001 [email protected] Java: Otras secuencias / 36

(MHPSORV

[5,2,7,8]p5(2)insertAfter(first(),2)

[5,7,8]3replace(p 3,7)

[5,3,8]swap(p 1,p 2)

[8,3,5]9remove(p 4)

[9,8,3,5]p2(5)last()

[9,8,3,5]p1(8)before(p 3)

[9,8,3,5]p4(9)insertFirst(9)

[8,3,5]p3(3)insertBefore(p 2,3)

[8,5]p2(5)insertAfter(p 1,5)

[8]p1(8)insertFirst(8)

65HVXOW�2SHUDFLyQ

Page 19: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

19

Copyright © 2001 [email protected] Java: Otras secuencias / 37

,PSOHP��GH�PositionEDVDGD�HQ�OLVWDV

class NSNode implements Position{

private NSNode prev, next;

private Object element;

private Container cont;

NSNode(NSNode newPrev, NSNode newNext, Container c, Object e) {

prev=NewPrev; next=NewNext;

cont=c; element=e;}

Copyright © 2001 [email protected] Java: Otras secuencias / 38

,PSOHP��GH�PositionEDVDGD�HQ�OLVWDV

public Object element()

throws InvPosException {

if (cont==null)

throw new InvPosException

("lugar sin contenedor");

return element;

}

Page 20: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

20

Copyright © 2001 [email protected] Java: Otras secuencias / 39

,PSOHP��GH�PositionEDVDGD�HQ�OLVWDV

public Container container()

throws InvPosException {

if (cont==null)

throw new InvPosException

("lugar sin contenedor");

return cont;

}

Copyright © 2001 [email protected] Java: Otras secuencias / 40

,PSOHP��GH�PositionEDVDGD�HQ�OLVWDV

NSNode getNext() {return next;}NSNode getPrev() {return prev;}

NSNode setNext(NSNode newNext) {

next=newNext;}

NSNode setPrev(NSNode newPrev) {

prev=newPrev;} NSNode setElement(Object newElem) {

element=newElem;}

NSNode setContainer(Object newCont) {

cont=newCont;} }

Page 21: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

21

Copyright © 2001 [email protected] Java: Otras secuencias / 41

,PSOHPHQWDFLyQ

EDVDGD�HQ�OLVWDV

private int numElts;

private NSNode head, tail;

Copyright © 2001 [email protected] Java: Otras secuencias / 42

,PSOHPHQWDFLyQ

EDVDGD�HQ�OLVWDV

public Position insertAfter(Position p, Object e)

throws InvPosException {

NSNode n=checkPosition(p);

numElts++;

NSNode newNode=new NSNode(n, n.getNext(), this, e);

n.getNext().setPrev(newNode);

n.setNext(newNode);

return NewNode;}

Page 22: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

22

Copyright © 2001 [email protected] Java: Otras secuencias / 43

,PSOHPHQWDFLyQ

EDVDGD�HQ�OLVWDV

public Object replace

(Position p, Object e)

throws InvPosException {

NSNode n=checkPosition(p);

Object oldElt=n.element();

n.setElement(e);

return oldElt;

}

Copyright © 2001 [email protected] Java: Otras secuencias / 44

,PSOHPHQWDFLyQ

EDVDGD�HQ�DUUD\V

S0 1 2 N-13 4 5

0

Múnich

1

Madrid

2

Moscú

3

Miami

Page 23: 2WURVWLSRVGHVHFXHQFLDVcdk/curs/prog2/00-01/secuencias.pdf · 7 Copyright © 2001 cdk@it.uc3m.es Java: Otras secuencias / 13,PSOHPHQWDFLyQ EDVDGDHQ’/1RGH public class DLDeque implements

23

Copyright © 2001 [email protected] Java: Otras secuencias / 45

&RPSDUDFLyQ

2���2�Q�remove

2���2�Q�insertAfter, insertBefore

2���2���insertFirst, insertLast

2���2���replace, swap

2���2���before, after

2���2���first, last

2���2���size, isEmpty

,PSO��/LVWD,PSO��$UUD\0pWRGRV

Copyright © 2001 [email protected] Java: Otras secuencias / 46

&DGHQDV

❚ /DV�VHFXHQFLDV�SHUPLWHQ�HO�DQLGDPLHQWR❙ >>���@�>�����@�>�����@@

❚ (Q�ODV�FDGHQDV�QR�H[LVWH�HO�FRQFHSWR��GH�DQLGDPLHQWR❙ ����������

❙ ���������� �������

❙ ������������ �������

❚ 0iV�HQ��)XQGDPHQWRV�GH�2UGHQDGRUHV�,