Computer Notes - Data Structures - 17

download Computer Notes - Data Structures - 17

of 30

Transcript of Computer Notes - Data Structures - 17

  • 8/3/2019 Computer Notes - Data Structures - 17

    1/30

    Class No.17

    Data Structures

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    2/30

    Reference Variables

    The symbol & has a few different purposesdepending on where it occurs in code.

    When it appears in front of a variable name, itis the address operator, i.e., it returns theaddress of the variable in memory.

    int x;int* ptr = &x;

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    3/30

    Reference Variables

    The symbol & can also appear after a typein a function signature:

    For example, insert and remove from theBinarySearchTree class.

    void insert( const EType& x );

    void remove( const EType& x );

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    4/30

    Reference Variables

    Or, in case we designed theBinarySearchTree class to hold integers

    only, i.e., no templates

    void insert( const int& x );

    void remove( const int& x );

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    5/30

    Reference Variables

    The & indicates a parameter that is a

    reference variable.

    Consider the following three differentfunctions:

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    6/30

    Reference Variables

    // example 1

    int intMinus1( int oldVal)

    {

    oldVal = oldVal 1;

    return oldVal;

    }

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    7/30

    Reference Variables

    // example 2

    int intMinus2( int* oldVal)

    {

    *oldVal = *oldVal 2;

    return *oldVal;

    }

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    8/30

    Reference Variables

    // example 3

    int intMinus3( int& oldVal)

    {

    oldVal = oldVal 3;

    return oldVal;

    }

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    9/30

    Reference Variables

    The caller function: calling intMinus1

    void caller(){

    int myInt = 31;

    int retVal;

    retVal = intMinus1( myInt );

    cout

  • 8/3/2019 Computer Notes - Data Structures - 17

    10/30

    Memory Organization

    Code

    Static data

    Stack

    Heap

    Process 1(browser)

    Process 3(word)

    Process 4(ourtest.exe)

    Windows OS

    Process 2(dev-c++)

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    11/30

    Reference Variables

    Call stack layout

    Parameters(caller)

    Local variables(caller)

    Return address(caller)

    Parameters(intMinus1)

    Local variables(intMinus1)

    Return address(intMinus1)sp

    Stack grows downwards

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    12/30

    Reference Variables

    Call stack layout when intMinus1 is called:

    1052

    1060

    1068

    1056

    311072

    ?

    callers other stuff

    myInt

    retVal

    oldVal31

    calling function caller

    called function intMinus1

    stack grows downwards

    sp

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    13/30

    Reference Variables

    How are myInt and oldVal related?

    Passing myInt to the functionintMinus1 results in a copyof myIntto be placed in parameter oldVal inthe call stack.

    Alterations are done to the copy of 31(stored in oldVal) and not the originalmyInt.

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    14/30

    Reference Variables

    The original myInt remainsunchanged.

    For this reason, this technique ofpassing parameters is called pass byvalue.

    Alterations are done to the copy of 31(stored in oldVal) and not the originalmyInt.

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    15/30

    Reference Variables

    Call stack layout after subtraction in intMinus1:

    1052

    1060

    1068

    1056

    311072

    ?

    callers other stuff

    myInt

    retVal

    oldVal31

    calling function caller

    called function intMinus1

    stack grows downwards

    sp

    30

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    16/30

    Reference Variables

    Call stack layout after return from intMinus1:

    1068

    311072

    30

    callers other stuff

    myInt

    retVal

    calling function caller

    stack grows downwards

    sp

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    17/30

    Reference Variables

    We could have called intMinus1 asvoid caller()

    {

    int retVal;

    retVal = intMinus1( 31 );// literal

    cout

  • 8/3/2019 Computer Notes - Data Structures - 17

    18/30

    Reference Variables

    If the programmer wanted to actually change avariables value from within a function, one waywould be to send a pointer:

    void caller(){

    int retVal;

    int myInt = 31;

    retVal = intMinus2( &myInt );cout

  • 8/3/2019 Computer Notes - Data Structures - 17

    19/30

    Reference Variables

    Call stack layout when intMinus2 is called:

    1052

    1060

    1068

    1056

    311072

    ?

    callers other stuff

    myInt

    retVal

    oldVal1072

    calling function caller

    called function intMinus2

    stack grows downwards

    sp

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    20/30

    Reference Variables

    Call stack layout after *oldVal = *oldVal 2;

    1052

    1060

    1068

    1056

    311072

    ?

    callers other stuff

    myInt

    retVal

    oldVal1072

    calling function caller

    called function intMinus2

    stack grows downwards

    sp

    29

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    21/30

    Reference Variables

    Call stack layout after return from intMinus2.

    1068

    311072

    29

    callers other stuff

    myInt

    retVal

    calling function caller

    stack grows downwards

    sp

    29

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    22/30

    Reference Variables

    Suppose we want a function to changean object.

    But we dont want to send the function acopy. The object could be large andcopying it costs time.

    We dont want to use pointers becauseof the messy syntax.

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    23/30

    Reference Variables

    The answer: call-by-reference(or pass-by-reference):

    void caller(){

    int retVal;

    int myInt = 31;retVal =

    intMinus3( myInt );

    cout

  • 8/3/2019 Computer Notes - Data Structures - 17

    24/30

    Reference Variables

    The & after int means that oldVal is aninteger reference variable.

    // example 3

    int intMinus3( int& oldVal)

    {

    oldVal = oldVal 3;

    return oldVal;

    }

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    25/30

    Reference Variables

    So what isa reference variable?

    The idea is: the integer object myInt is used

    exactly as it exists in the caller. The functionsimply reaches it through a different name,oldVal.

    The function intMinus3 cannot use the name

    myInt because it is in the callers scope. But both variable names refer to the same

    object (same memory cell).

    http://ecomputernotes.com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    26/30

    Reference Variables

    Call stack layout when intMinus3 is called:

    1052

    1060

    1068

    1056

    311072

    ?

    callers other stuff

    myInt

    retVal

    oldVal

    calling function caller

    called function intMinus3

    stack grows downwards

    sp

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    27/30

    Reference Variables

    Call stack layout when intMinus3 is called:

    1052

    1060

    1068

    1056

    311072

    ?

    callers other stuff

    myInt

    retVal

    oldVal

    calling function caller

    called function intMinus3

    stack grows downwards

    sp

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    28/30

    Reference Variables

    Call stack layout after oldVal = oldVal - 3:

    1052

    1060

    1068

    1056

    311072

    ?

    callers other stuff

    myInt

    retVal

    oldVal

    calling function caller

    called function intMinus3

    stack grows downwards

    sp

    28

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    29/30

    Reference Variables

    Call stack layout after return from intMinus3:

    1068

    311072

    28

    callers other stuff

    myInt

    retVal

    calling function caller

    stack grows downwards

    sp

    28

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/
  • 8/3/2019 Computer Notes - Data Structures - 17

    30/30

    Reference Variables

    The compiler may actually implement call-by-reference using pointers as we did in

    example 2. The obtaining of address and de-

    referencing would be done behind thescene.

    We should think in terms of therenaming abstraction.

    http://ecomputernotes com

    http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/http://ecomputernotes.com/