Presentation is loading. Please wait.

Presentation is loading. Please wait.

Linked Lists in C and C++ CS-2303, C-Term 20101 Linked Lists in C and C++ CS-2303 System Programming Concepts (Slides include materials from The C Programming.

Similar presentations


Presentation on theme: "Linked Lists in C and C++ CS-2303, C-Term 20101 Linked Lists in C and C++ CS-2303 System Programming Concepts (Slides include materials from The C Programming."— Presentation transcript:

1 Linked Lists in C and C++ CS-2303, C-Term 20101 Linked Lists in C and C++ CS-2303 System Programming Concepts (Slides include materials from The C Programming Language, 2 nd edition, by Kernighan and Ritchie and from C: How to Program, 5 th and 6 th editions, by Deitel and Deitel)

2 Linked Lists in C and C++ CS-2303, C-Term 20102 Definitions Linked List A data structure in which each element is dynamically allocated and in which elements point to each other to define a linear relationship Singly- or doubly-linked Stack, queue, circular list Tree A data structure in which each element is dynamically allocated and in which each element has more than one potential successor Defines a partial order Note: elements are usually the same type (but not always).

3 Linked Lists in C and C++ CS-2303, C-Term 20103 Linked List struct listItem { type payload; struct listItem *next; }; payload next payload next payload next payload next Note: payload may be multiple members.

4 Linked Lists in C and C++ CS-2303, C-Term 20104 Linked List (continued) Items of list are usually same type Generally obtained from malloc() In computing, malloc is a subroutine for performing dynamic memory allocation in the C and C++ programming languages, though its use in C++ has been largely superseded by operators new and new[]. malloc is part of the standard library for both languages and is declared in the stdlib.h header although it is also declared within the std namespace via the C++'s cstdlib header. Programs must properly manage dynamic memory allocated through the use of malloc to avoid memory leaks and memory corruption. Each item points to next item Last item points to null Need “ head ” to point to first item!

5 “Payload” of item may be almost anything A single member or multiple members Any type of object whose size is known at compile time Including struct, union, char * or other pointers Also arrays of fixed size at compile time Linked Lists in C and C++ CS-2303, C-Term 20105 A Head BC

6 Linked Lists in C and C++ CS-2303, C-Term 20106 Usage of Linked Lists Not massive amounts of data Linear search is okay Sorting not necessary or sometimes not possible Need to add and delete data “on the fly” Even from middle of list Items often need to be added to or deleted from the “ends”

7 Linked Lists in C and C++ CS-2303, C-Term 20107 Linked List (continued) struct listItem { type payload; struct listItem *next; }; struct listItem *head; payload next payload next payload next payload next

8 Linked Lists in C and C++ CS-2303, C-Term 20108 Adding an Item to a List struct listItem *p, *q; Add an item pointed to by q after item pointed to by p –Neither p nor q is NULL payload next payload next payload next payload next payload next

9 Linked Lists in C and C++ CS-2303, C-Term 20109 Adding an Item to a List listItem *addAfter(listItem *p, listItem *q){ q -> next = p -> next; p -> next = q; return p; } payload next payload next payload next payload next payload next

10 Linked Lists in C and C++ CS-2303, C-Term 201010 Adding an Item to a List listItem *addAfter(listItem *p, listItem *q){ q -> next = p -> next; p -> next = q; return p; } payload next payload next payload next payload next payload next

11 Linked Lists in C and C++ CS-2303, C-Term 201011 Adding an Item to a List listItem *addAfter(listItem *p, listItem *q){ q -> next = p -> next; p -> next = q; return p; } payload next payload next payload next payload next payload next Question: What to do if we cannot guarantee that p and q are non-NULL?

12 Linked Lists in C and C++ CS-2303, C-Term 201012 Adding an Item to a List (continued) listItem *addAfter(listItem *p, listItem *q){ if (p && q) { q -> next = p -> next; p -> next = q; } return p; } payload next payload next payload next payload next payload next Note test for non-null p and q

13 Linked Lists in C and C++ CS-2303, C-Term 201013 What about Adding an Item before another Item? struct listItem *p; Add an item before item pointed to by p ( p != NULL ) payload next payload next payload next payload next payload next

14 Linked Lists in C and C++ CS-2303, C-Term 201014 What about Adding an Item before another Item? Answer:– –Need to search list from beginning to find previous item –Add new item after previous item

15 Linked Lists in C and C++ CS-2303, C-Term 201015 Doubly-Linked List struct listItem { type payload; listItem *prev; listItem *next; }; struct listItem *head, *tail; prevnext payload prevnext payload prevnext payload prevnext payload In-class exercise:– how to add a new item q after a list item p

16 Linked Lists in C and C++ CS-2303, C-Term 201016 Other Kinds of List Structures Queue — FIFO (First In, First Out) Items added at end Items removed from beginning Stack — LIFO (Last In, First Out) Items added at beginning, removed from beginning Circular list Last item points to first item Head may point to first or last item Items added to end, removed from beginning

17 Linked Lists in C and C++ CS-2303, C-Term 201017 Circular List listItem *addAfter (listItem *p, listItem *tail){ if (p && tail) { p -> next = tail -> next; tail = p; } else if (p) { tail p -> next = p; } return tail; } payload next payload next payload next payload next struct listItem *tail; Optional:– struct listItem *head;

18 Linked Lists in C and C++ CS-2303, C-Term 201018 Questions?


Download ppt "Linked Lists in C and C++ CS-2303, C-Term 20101 Linked Lists in C and C++ CS-2303 System Programming Concepts (Slides include materials from The C Programming."

Similar presentations


Ads by Google