CS 1001 Lecture 26 Static vs Dynamic Data

  • Slides: 15
Download presentation
CS 1001 Lecture 26 • • • Static vs Dynamic Data Structures Array vs

CS 1001 Lecture 26 • • • Static vs Dynamic Data Structures Array vs Link List Pointers Link List Operations Example 29 April, 2000

Static vs Dynamic • Static Data Structure -- structures whose sizes are fixed once

Static vs Dynamic • Static Data Structure -- structures whose sizes are fixed once memory is allocated, e. g. , arrays – type, DIMENSION (l: u) : : list_of _array_names – type, DIMENSION (: ) , ALLOCATABLE : : list ALLOCATE (list, STAT = status_variable) DEALLOCATE (list, STAT = status_variable) • Dynamic Data Structure -- expands and contracts as needed during execution – collection of elements called nodes – e. g. , Link list 29 April, 2000

 • PROs Arrays – Used for list of data that can be naturally

• PROs Arrays – Used for list of data that can be naturally organized into tables – Easy and fast to access each element by indices – Easy and fast to operate on corresponding data points • CONs – Fixed size – Hard to shift elements 1, 3, 5, 8, 10, …, 80, … to insert 2 1, 2, 3, 5, 8, 10, …, 80, . . . 1, 2, 3, 5, 8, 10, …, 80, … to delete 3 1, 2, 5, 8, 10, …, 80, . . . 29 April, 2000

Link List • Link list -- collection of elements called nodes and each node

Link List • Link list -- collection of elements called nodes and each node consists of data and link (or pointer) list 29 April, 2000 data Brown ptr CMU data ptr WPI null

Adding to the linked list data next Brown data next CMU list next Brown

Adding to the linked list data next Brown data next CMU list next Brown data list data next Brown Prev_ptr 29 April, 2000 data RICE next data CMU Prev_ptr next WPI null new Prev_ptr data Data next WPI null new data RICE next data CMU new next WPI null data RICE

Delete a node from a linked list data next Brown list next Brown data

Delete a node from a linked list data next Brown list next Brown data next Brown Prev_ptr 29 April, 2000 data To_delete data next WPI null data RICE next data CMU Prev_ptr list next CMU Prev_ptr data To_delete next WPI null data RICE data null To_delete next WPI null data RICE

Linked List Elements • Pointer to the List • Node -- defined as a

Linked List Elements • Pointer to the List • Node -- defined as a derived type e. g. , 29 April, 2000 School_node Name next TYPE School_node CHARACTER(8) : : Name TYPE (School_node) POINTER : : next END TYPE School_node TYPE School CHARACTER(8) : : Name School_node 1 REAL : : Cost data next END TYPE School_node 1 TYPE School : : data TYPE (School_node 1) POINTER : : next END TYPE School_node 1

Pointers • Declaration Type, attribute_list, POINTER : : pointer_variable e. g. , CHARACTER(8), POINTER

Pointers • Declaration Type, attribute_list, POINTER : : pointer_variable e. g. , CHARACTER(8), POINTER : : String. Ptr TYPE (School_node 1), POINTER : : Next. Ptr • ALLOCATE – Used to acquire memory locations to associate with the pointer variable during execution – e. g. , ALLOCATE(String. Ptr) Memory for data of type School_node 1 ALLOCATE (Next. Ptr) Name -- Character(8) String. Ptr Cost -- Real Next -- pointer to type Character(8) Next. Ptr School_node 1 29 April, 2000

Pointer • Pointer variables: – undefined • initially undefined – associated -- when a

Pointer • Pointer variables: – undefined • initially undefined – associated -- when a pointer points to a target • intrinsic function ASSOCIATED to test whether a pointer variable is associated with a target. E. g. , ASSOCIATED (pointer) returns. TRUE. if association exists, returns. FALSE. otherwise. – null or disassociated • NULLIFY (list_of_pointers) change pointer variables to null • the association between that pointer and the target memory location is broken • DEALLOCATE statement is used to free the target memory 29 April, 2000

Pointer Assignment • Form: pointer 1 => pointer 2 if pointer 1 and pointer

Pointer Assignment • Form: pointer 1 => pointer 2 if pointer 1 and pointer 2 have the same type Pointer 1 Pointer 2 Pointer 1 => Pointer 2 Need another pointer ? Pointer 1 Pointer 2 ASSOCIATED ( Pointer 1, Pointer 2) =. TRUE. If pointer 1 and pointer 2 point to the same target. . FALSE. Otherwise. 29 April, 2000

Pointers in expressions CHARACTER (8), POINTER : : School TYPE School_node CHARACTER(8) : :

Pointers in expressions CHARACTER (8), POINTER : : School TYPE School_node CHARACTER(8) : : Name CHARACTER(8) TYPE (School_node) POINTER : : next list END TYPE School_node TYPE (School_node), POINTER : : list CHARACTER(8) Pointer to School_node ALLOCATE (School) ALLOCATE (list) School = “Stanford” Print *, School Stanford 29 April, 2000

Pointers in expressions CHARACTER (8), POINTER : : School 1, School 2 ALLOCATE (School

Pointers in expressions CHARACTER (8), POINTER : : School 1, School 2 ALLOCATE (School 1) ALLOCATE (School 2) Stanford School 1 = “Stanford” School 2 Cornell School 2 = “Cornell” School 1 = School 2 School 1 => School 2 29 April, 2000 School 1 Cornell School 2 Cornell School 1 Stanford School 2 Cornell

Constructing a Linked List TYPE School_node CHARACTER(8) : : Name TYPE (School_node) POINTER :

Constructing a Linked List TYPE School_node CHARACTER(8) : : Name TYPE (School_node) POINTER : : next CHARACTER(8) END TYPE School_node Pointer to School_node TYPE (School_node), POINTER : : list, temp ALLOCATE (temp) Stanford temp%Name = “Stanford” Null list NULLIFY(temp%next) list => temp list Stanford WPI temp ALLOCATE(temp) Null temp%Name = “WPI” temp NULLIFY(temp%next) list Stanford WPI list%next => temp Null 29 April, 2000

Traversing a linked list Stanford WPI Cornell Null Curr_ptr => list Curr_ptr => Curr_ptr%next

Traversing a linked list Stanford WPI Cornell Null Curr_ptr => list Curr_ptr => Curr_ptr%next Curr_ptr is null -- end of list Curr_ptr => list DO IF (. NOT. ASSOCIATED (Curr_ptr) EXIT PRINT *, Curr_ptr%name Curr_ptr => Curr_ptr%next END DO 29 April, 2000

Example • Get a list of TCP/IP address from a file • Use linked

Example • Get a list of TCP/IP address from a file • Use linked list to keep track of how many times the addresses was used • traverse the list and display each TCP/IP address and its counts 29 April, 2000