arrays and other data structures 4 introduction to arrays 4 bounds and subscripts 4 integer arrays 4...
Post on 22-Dec-2015
246 views
TRANSCRIPT
Arrays and Other Data Structures
Introduction to Arrays Bounds and Subscripts Integer Arrays Floating Point Number Arrays Lists (Linked) Stacks
Introduction to Arrays
An array is a contiguous block of the same data type. For example, you could have an array of integers (a block of integers), but not a block of integers and floats.
An integer array • int agesOfKids[n]; •Where n is the size of the block indicating the number of integers in this array
Bounds and Subscripts
Array Bounds – "Array bounds" refer to the boundaries in memory which the
array occupies. The beginning of the array (the first) element is considered the lower bound, while the end (or top) is considered to be the upper bound.
Element – An "element" is an individual entity inside the array. Because C
arrays have a lower bound of 0, array[0] refers to the first element.
Array Subscript – The expression inside the [ ... ] is known as an array subscript.
4
[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11]
66 64 72 78 85 90 99 105 98 90 88 80row 2,col 7might beArizona’shigh forAugust
EXAMPLE -- To keep monthly high temperatures for all 50 states in one array.
int stateHighs [ 50 ] [12 ] ;
[ 0 ]
[ 1 ]
[ 2 ]
.
. stateHighs [2] [7]
.
[ 48 ]
[ 49 ]
5
const int NUM_STATES = 50 ;const int NUM_MONTHS = 12 ;int stateHighs [ NUM_STATES ] [ NUM_MONTHS ] ;
In memory, arrays are stored in row order. The first row
is followed by the second row, etc. Base Address
. . .
12 highs for state 0 12 highs for state 1 etc. Alabama Alaska first row second row
8000 8024 8048
STORAGErows columns
Integer Arrays
We wish to store the 4-digit pager numbers for all 50 apartments in an apartment complex
int[] pager_numbers = new int[51]; Location zero is reserved for the building
manager pager_number[0] = 2435;
Integer Arrays
Suppose that we wish to print all pager numbers from apartment#1 to apartment#50 in a nicely formatted list
The best way to do this would be to use the for loop
The for Statement
“for” is a loop statement that is controlled through a loop control variable
for (lcv=1; lcv<=100; lcv++) The above loop will start with lcv=1 and it
will run until lcv equals 100. The step size is 1 (lcv++)
Pager Numbers Printout in Java
int[] pagers = new int[50]; int loop; for (loop=1; loop<=50; loop++) System.out.println(pagers[loop]);
Lists
Introduction to Lists Contiguous Lists Adding and Deleting in Contiguous Lists Linked Lists Pointers in Linked Lists Inserting into a Linked List Deleting from a Linked List
Introduction to Lists
An organization’s membership list may grow and shrink in size.
Your phone book may also grow and shrink in size as time passes
We need a mechanism to store dynamic lists in the memory
Linked Lists
Linked lists have entries connected with pointers
Deleting an entry can be implemented by re-arranging pointers
So we leave the entries where they are and just re-align the pointers
Pointers
Think about the pointers in your life
My mailing address
My Home
Pointers
Pointers
Web links are also pointers
http://www.ucla.eduUCLA Server
Computer
Inserting into a Linked List
Header
Fred423-3158
NEXT
Bob242-7111
New Entry
NEXT
Inserting into a Linked List
Header
Fred423-3158
NEXT
Bob242-7111
New Entry
NEXT
Inserting into a Linked List
Header Fred423-3158
NEXT
Bob242-7111
NEXT
Deleting from a Linked List
HeaderBob
423-3178
NEXT
Alice242-7111
NEXT
Fred423-3158
NEXT
Deleting from a Linked List
Header
Bob423-3178
NEXT
Alice242-7111
NEXT
Fred423-3158
NEXT
Stacks
Stacks Stack Base and Stack Pointer Push operation Pop operation
Stacks
A stack is a useful data structure that stores values that may be needed in the near future
For example, you may want to return back to a website that you browsed a few moments ago
You may want to undo an operation that you performed in MS-Word
In a stack, we have a fixed size block of memory available in which we can only add and delete at one end
We keep track of both ends of stack with pointers
Stack Operation
Designated Block for
Stack
Other Memory
Stack Operation
SP
SB
EMPTY STACK
Stack Operation
SP
SBVal1
STACK WITH ONE DATA ITEM
Push Operation
SP
SBVal1
We store a data item at the location referenced by SP
Push Operation
SP
SBVal1
We store a data item at the location referenced by SP and then increment SP
Val2
Push Operation
Stack[SP] = New Value SP= SP+1; The stack has a fixed maximum size of N
locations. We cannot bump into other memory
Therefore, we must check before pushing if the stack is full
How?
Push Operation
if (SP == SB+N) cout “sorry!! Stack is full”; else { Stack[SP] = New_Value SP= SP+1; }
Pop Operation
SP
SBVal1
We retrieve a data item from the top of stack. How can we reach top of stack value?
Val2
Val3
Pop Operation
SP
SBVal1
Val3 is top of stack and it is one below the current location referenced by SP
Val2
Val3
Pop Operation
SP
SBVal1
Val3 is popped out and SP is decremented to point to newly vacated location
Val2
Pop Operation
Popped_Value = Stack[SP-1]; SP= SP-1; We cannot pop from an empty stack so we
must check before popping How?
Pop Operation
if (SP == SB) cout “sorry!! Stack is empty”; else { Popped_Value = Stack[SP-1]; SP= SP-1; }
Stack Applications
Stacks are very useful in remembering values
Stacks operate similar to the way the office clerks process letters and folders
The current document is on top of stack and it has to be processed first
Stacks help programs remember the place where call to a procedure was issued