Presentation is loading. Please wait.

Presentation is loading. Please wait.

29 April, 2000 CS1001 Lecture 26 Static vs Dynamic Data Structures Array vs Link List Pointers Link List Operations Example.

Similar presentations


Presentation on theme: "29 April, 2000 CS1001 Lecture 26 Static vs Dynamic Data Structures Array vs Link List Pointers Link List Operations Example."— Presentation transcript:

1 29 April, 2000 CS1001 Lecture 26 Static vs Dynamic Data Structures Array vs Link List Pointers Link List Operations Example

2 29 April, 2000 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

3 29 April, 2000 Arrays PROs –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,...

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

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

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

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

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

9 29 April, 2000 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

10 29 April, 2000 Pointer Assignment Form: pointer1 => pointer2 if pointer1 and pointer2 have the same type Pointer1 Pointer2 Pointer1 Pointer2 Pointer1 => Pointer2 Need another pointer ? ASSOCIATED ( Pointer1, Pointer2) =.TRUE. If pointer1 and pointer2 point to the same target..FALSE. Otherwise.

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

12 29 April, 2000 Pointers in expressions CHARACTER (8), POINTER :: School1, School2 ALLOCATE (School1) ALLOCATE (School2) School1 = “Stanford” School2 = “Cornell” School1 = School2 School1 => School2 Stanford Cornell School1 School2 Cornell School1 School2 Stanford Cornell School1 School2

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

14 29 April, 2000 Traversing a linked list list Stanford WPI Cornell Null Curr_ptr => list Curr_ptr => Curr_ptr%next Curr_ptr 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

15 29 April, 2000 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


Download ppt "29 April, 2000 CS1001 Lecture 26 Static vs Dynamic Data Structures Array vs Link List Pointers Link List Operations Example."

Similar presentations


Ads by Google