Presentation is loading. Please wait.

Presentation is loading. Please wait.

CSCE 3110 Data Structures & Algorithm Analysis Rada Mihalcea Growable Arrays. Lists. Reading: Chap. 3 Weiss.

Similar presentations


Presentation on theme: "CSCE 3110 Data Structures & Algorithm Analysis Rada Mihalcea Growable Arrays. Lists. Reading: Chap. 3 Weiss."— Presentation transcript:

1 CSCE 3110 Data Structures & Algorithm Analysis Rada Mihalcea Growable Arrays. Lists. Reading: Chap. 3 Weiss

2 Linked Lists Avoid the drawbacks of fixed size arrays with Growable arrays Linked lists

3 Growable arrays Avoid the problem of fixed-size arrays Increase the size of the array when needed (I.e. when capacity is exceeded) Two strategies: tight strategy (add a constant): f(N) = N + c growth strategy (double up): f(N) = 2N

4 Tight Strategy Add a number k (k = constant) of elements every time the capacity is exceeded C0 + (C0+k) + … (C0+Sk) = S = (N – C0) / k Running time? C0 * S + S*(S+1) / 2 O(N 2 )

5 Tight Strategy void insertLast(int rear, element o) { if ( size == rear) { capacity += k; element* B = new element[capacity]; for(int i=0; i

6 Growth Strategy Double the size of the array every time is needed (I.e. capacity exceeded) C0 + (C0 * 2) + (C0*4) + … + (C0*2 i ) = i = log (N / C0) Running time? C0 [ … + 2 log(N/C0) ] O(N) How does the previous code change?

7 Linked Lists Avoid the drawbacks of fixed size arrays with Growable arrays Linked lists

8 int i, *pi; float f, *pf; pi = (int *) malloc(sizeof(int)); pf = (float *) malloc (sizeof(float)); *pi =1024; *pf =3.14; printf(an integer = %d, a float = %f\n, *pi, *pf); free(pi); free(pf); request memory return memory Using Dynamically Allocated Memory (review)

9 bat cat sat vat NULL Linked Lists

10 bat cat sat vat NULL mat Insertion Compare this with the insertion in arrays!

11 bat cat sat vat NULL mat dangling reference Deletion

12 List ADT ADT with position-based methods generic methodssize(), isEmpty() query methodsisFirst(p), isLast(p) accessor methodsfirst(), last() before(p), after(p) update methodsswapElements(p,q), replaceElement(p,e) insertFirst(e), insertLast(e) insertBefore(p,e), insertAfter(p,e) removeAfter(p)

13 typedef struct node, *pnode; typedef struct node { char data [4]; pnode next; }; Creation pnode ptr =NULL; Testing #define IS_EMPTY(ptr) (!(ptr)) Allocation ptr=(pnode) malloc (sizeof(node)); Declaration Implementation

14 b a t \0 NULL address of first node ptr data ptr link ptr e name (*e).name strcpy(ptr data, bat); ptr link = NULL; Create one Node

15 pnode create2( ) { /* create a linked list with two nodes */ pnode first, second; first = (pnode) malloc(sizeof(node)); second = ( pnode) malloc(sizeof(node)); second -> next= NULL; second -> data = 20; first -> data = 10; first ->next= second; return first; } NULL ptr Example: Create a two-nodes list

16 void insertAfter(pnode node, char* data) { /* insert a new node with data into the list ptr after node */ pnode temp; temp = (pnode) malloc(sizeof(node)); if (IS_FULL(temp)){ fprintf(stderr, The memory is full\n); exit (1); } Insert (after a specific position)

17 strcpy(temp->data, data); if (node) { noempty list temp->next=node->next; node->next= temp; } else { empty list temp->next= NULL; node =temp; } } NULL temp node

18 10 20 NULL NULL 50 node trail = NULL node (a) before deletion (b)after deletion Deletion Delete node other than the first node NULL NULL 10 head node head

19 void removeAfter(pnode node) { /* delete what follows after node in the list */ pnode tmp; if (node) { tmp = node -> next; node->next = node->next->next; free(tmp); } } NULL NULL 10 node

20 void traverseList(pnode ptr) { printf(The list contains: ); for ( ; ptr; ptr = ptr->next) printf(%4d, ptr->data); printf(\n); } Traverse a list Where does ptr point after this function call?

21 Other List Operations swapElements insertFirst insertLast deleteBefore deleteLast

22 Running Time Analysis insertAfter O(?) deleteAfter O(?) deleteBeforeO(?) deleteLastO(?) insertFirst O(?) insertLast O(?)


Download ppt "CSCE 3110 Data Structures & Algorithm Analysis Rada Mihalcea Growable Arrays. Lists. Reading: Chap. 3 Weiss."

Similar presentations


Ads by Google