Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Review of Class on Nov 30:. 2 Chapter 12: Structures and ADTs  Outline  Declaring Structures  Accessing a Member in a structure variable  Initialization.

Similar presentations


Presentation on theme: "1 Review of Class on Nov 30:. 2 Chapter 12: Structures and ADTs  Outline  Declaring Structures  Accessing a Member in a structure variable  Initialization."— Presentation transcript:

1 1 Review of Class on Nov 30:

2 2 Chapter 12: Structures and ADTs  Outline  Declaring Structures  Accessing a Member in a structure variable  Initialization of Structures  Self-Referential Structures  Linear Linked Lists  The use of typedef

3 3 Self-Referential Structures  self-referential structures  structures with pointer members that point to the structure type containing them.  Example: struct list{ int data; struct list *pNext; } a, b, c; member pNext points to the structure type struct list, which contains pNext as a member  struct list is a self-referential structure.

4 4 Self-Referential Structures  Using self-referential structures to implement linear linked lists 1 &b a 2 &c b 3 NULL c struct list{ int data; struct list *pNext; } a, b, c; a.data=1; b.data=2; c.data=3; a.pNext = &b; b.pNext = &c; c.pNext = NULL; data pNext data pNext data pNext

5 5 Linear Linked Lists  What is linear Linked List?  How to implement linear linked lists  create a list  counting and lookup  insertion  deletion

6 6 Linear Linked Lists  What is Linear Linked List?  a list on which data structures hang sequentially. a head pointer that points to the first element of the list, each element points at a successor element, the last element having a link value NULL. pHead struct list{ int data; struct list *pNext; } a, b, c; 1 &b 2 &c 3 NULL data pNext data pNext data pNext

7 7 Linear Linked Lists  Linear Linked Lists  A linked list is a very common data structure.  It can be used to implement efficient algorithms, such as sorting, searching.

8 8 Linear Linked Lists  What is linear Linked List?  How to implement linear linked lists  create a list  counting and lookup  insertion  deletion

9 9 Linear Linked Lists  How to implement linear linked lists  Consider the following list: struct linked_list{ char data; struct linked_list *pNext; }; pHead data ………… NULL

10 10 Linear Linked Lists  Operations on a linked list Define functions such that  create a list from a value of type char from an array of type char  counting: the number of elements  looking up an element  inserting an element  deleting an element struct linked_list{ char data; struct linked_list *pNext; };

11 11 Linear Linked Lists  Operations on a linked list  create a list from a value: struct linked_list *create_value(char d); create a list that contains a single item; the value of member data in this item is equal to d the head pointer of this list is returned. struct linked_list * pHead; pHead = create_value(‘A’); pHead ‘A’ NULL struct linked_list{ char data; struct linked_list *pNext; };

12 12 #include struct linked_list{ char data; struct linked_list *pNext; }; struct linked_list *create_value(char data); #include "list.h" int main(){ struct linked_list *pHead; pHead = create_value('A'); ……. } list.h main.c #include "list.h" struct linked_list *create_value(char data){ struct linked_list *pHead = NULL; pHead = (struct linked_list *) malloc(sizeof(struct linked_list)); pHead->data = data; pHead->pNext = NULL; return pHead; } list.c pHead ‘A’ NULL

13 13 Linear Linked Lists  Operations on a linked list  create a linked list from an array: struct linked_list *create_array(char data_array[], int n); a list that contains n items is created. the member data of each item is set according to data_array. the head pointer of this list is returned. char data_array[]={'a', 'b', 'c', 'd', 'e'}; struct linked_list * pHead; pHead = create_array(data_array, 5); pHead ‘a’‘b’‘c’‘d’‘e’ NULL struct linked_list{ char data; struct linked_list *pNext; };

14 14 #include struct linked_list{ char data; struct linked_list *pNext; }; struct linked_list *create_array(char data_array[], int n); #include "list.h" int main(){ struct linked_list *pHead; char data_array[]={'a', 'b', 'c', 'd', 'e'}; pHead = create_array(data_array, 5); …… } struct linked_list *create_array(char data_array[], int n){ struct linked_list *p=NULL, *pHead = NULL; int i; if(n==0) return NULL; else{ pHead = (struct linked_list *) malloc(sizeof(struct linked_list)); pHead->data = data_array[0]; pHead->pNext = NULL; p = pHead; for (i=1; i<n;i++){ p->pNext = (struct linked_list *) malloc(sizeof(struct linked_list)); p->pNext->data = data_array[i]; p->pNext->pNext = NULL; p = p->pNext; } } return pHead; } list.h main.c pHead ‘a’‘b’‘c’‘d’‘e’ NULL list.c

15 15 Linear Linked Lists  Operations on a linked list  count the elements in a list int count(struct linked_list *pHead); Given a list, the head of which is pointed at by pHead, the number of elements in this list is returned. The value of count(pHead) is equal to 5 pHead ‘a’‘b’‘c’‘d’‘e’ NULL struct linked_list{ char data; struct linked_list *pNext; };

16 16 int count(struct linked_list *pHead){ int i=0; while(pHead!=NULL){ pHead = pHead->pNext; i++; } return i; } #include struct linked_list{ char data; struct linked_list *pNext; }; struct linked_list *create_array(char data_array[], int n); int count(struct linked_list *pHead); #include "list.h" int main(){ struct linked_list *pHead; char data_array[]={'a', 'b', 'c', 'd', 'e'}; pHead = create_array(data_array, 5); printf("%d", count(pHead)); } list.h list.c main.c

17 17 Linear Linked Lists  Operations on a linked list  Search a list for a particular element. struct linked_list* lookup(char data, struct linked_list *pHead); If the element is found, a pointer to that element is returned; otherwise the NULL pointer is returned. The value of lookup(‘b’, pHead) is a pointer pointing to the second elements pHead ‘a’‘b’‘c’‘d’‘e’ NULL struct linked_list{ char data; struct linked_list *pNext; };

18 18 #include struct linked_list{ char data; struct linked_list *pNext; }; struct linked_list *create_array(char data_array[], int n); struct linked_list* lookup(char data, struct linked_list *pHead); struct linked_list* lookup(char data, struct linked_list *pHead){ while(pHead!=NULL){ if (pHead->data == data) return pHead; pHead = pHead->pNext; } return pHead; } #include "list.h" int main(){ struct linked_list *pHead; struct linked_list *p; char data_array[]={'a', 'b', 'c', 'd', 'e'}; pHead = create_array(data_array, 5); p = lookup(‘c', pHead); if (p!=NULL) printf("Look UP: ‘c' is found \n"); else printf("Look UP: ‘c' is not found \n"); } list.h main.c list.c

19 19 Linear Linked Lists  Operations on a linked list  inserting an element void insert(struct linked_list *p, char d); Insert the data after the element pointed at by p Before After insert(p, ‘A’); pHead ‘a’‘b’‘c’‘d’‘e’ NULL p pHead ‘a’‘b’‘c’‘d’‘e’ NULL p ‘A’ struct linked_list{ char data; struct linked_list *pNext; };

20 20 #include struct linked_list{ char data; struct linked_list *pNext; }; struct linked_list *create_array(char data_array[], int n); void insert(struct linked_list *p, char data); void insert(struct linked_list *p, char data){ /*Insert the data after the element pointed at by p*/ struct linked_list *pData; pData = (struct linked_list *) malloc(sizeof(struct linked_list)); pData -> data = data; pData->pNext = p->pNext; p->pNext = pData; } #include "list.h" int main(){ struct linked_list *pHead = NULL; struct linked_list *p; char data_array[]={'a', 'b', 'c', 'd', 'e'}; pHead = create_array(data_array, 5); insert(pHead, 'A'); ……… } list.c main.c list.h

21 21 Linear Linked Lists  Operations on a linked list  Deleting an element void delete (struct linked_list *p); delete the element pointed at by p->pNext. Before After delete(p) pHead ‘a’‘b’‘c’ ‘d’ ‘e’ NULL p pHead ‘a’‘b’‘c’‘e’ NULL p struct linked_list{ char data; struct linked_list *pNext; };

22 22 #include struct linked_list{ char data; struct linked_list *pNext; }; struct linked_list *create_array(char data_array[], int n); void delete(struct linked_list *p); void delete(struct linked_list *p){ /* delete the element pointed at by p->pNext. */ struct linked_list *q; q = p->pNext; p -> pNext = q -> pNext; } #include "list.h" int main(){ struct linked_list *pHead; struct linked_list *p; char data_array[]={'a', 'b', 'c', 'd', 'e'}; pHead = create_array(data_array, 5); delete(pHead->pNext); delete(pHead); ………… } main.c list.c list.h

23 23 Linear Linked Lists  Operations on a linked list  Release memory allocated to the list  Dynamic Memory Allocation: space allocated by calloc() and malloc() remains in use for the duration of the program unless it is released by the programmer. void release_list(struct linked_list *pHead) orelease the space allocated to the elements in the list. struct linked_list{ char data; struct linked_list *pNext; };

24 24 #include struct linked_list{ char data; struct linked_list *pNext; }; struct linked_list *create_array(char data_array[], int n); void release_list(struct linked_list *pHead); void release_list(struct linked_list *pHead){ struct linked_list *p; while (pHead !=NULL){ p = pHead; pHead = pHead->pNext; p -> pNext = NULL; free(p); } } #include "list.h" int main(){ struct linked_list *pHead; struct linked_list *p; char data_array[]={'a', 'b', 'c', 'd', 'e'}; pHead = create_array(data_array, 5); ………… release_list(pHead); ………… }

25 25 Linear Linked Lists  Summary  What is linear Linked List  How to implement linear linked lists create a linked list counting and lookup insertion and deletion struct linked_list{ char data; struct linked_list *pNext; };

26 26 Chapter 12: Structures and ADTs  Outline  Declaring Structures  Accessing a Member in a structure variable  Initialization of Structures  Self-Referential Structures  Linear Linked Lists  The use of typedef

27 27 The Use of typedef  typedef  an identifier can be associated with a specific type  Example: typedef char DATA; DATA a, b, c; /*  char a,b,c; */ struct linked_list{ char data; struct linked_list *pNext; }; typedef struct linked_list ELEMENT; typedef ELEMENT * LINK; LINK pHead;

28 28 Chapter 12: Structures and ADTs  Outline  Declaring Structures  Accessing a Member in a structure variable  Initialization of Structures  Self-Referential Structures  Linear Linked Lists  The use of typedef


Download ppt "1 Review of Class on Nov 30:. 2 Chapter 12: Structures and ADTs  Outline  Declaring Structures  Accessing a Member in a structure variable  Initialization."

Similar presentations


Ads by Google