Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees...
-
Upload
janis-skinner -
Category
Documents
-
view
216 -
download
0
Transcript of Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees...
![Page 1: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/1.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 1
Data Structures — Lists and Trees
CS-2301, System Programmingfor Non-Majors
(Slides include materials from The C Programming Language, 2nd edition, by Kernighan and Ritchie and from C: How to Program, 5th and 6th editions, by Deitel and Deitel)
![Page 2: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/2.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 2
Reading Assignment
• Chapter 6 of Kernighan and Ritchie
AGAIN!
![Page 3: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/3.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 3
Real-Life Computational Problems
• All about organizing data!– What shape the data should have to solve your
problem– Where the data should flow so it is available
when you need it– How your data can accommodate change and
evolution of …• … your own program
• … the requirements of your application
![Page 4: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/4.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 4
Support from Programming Languages
• E.g., Java knows about all kinds of• Lists, trees, arrays, collections
• You tell it what you want and it does the rest
• E.g., Scheme is entirely built on lists• Anything a list can do is easy!
• Anything a list cannot do is hard!
• E.g., Matlab is about matrices and vectors• Extensive support for linear and non-linear algebras
![Page 5: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/5.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 5
In the case of C
• You are on your own!
• Only built-in tools– Arrays– structs and unions– Functions
• Everything must be done “long-hand”
![Page 6: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/6.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 6
Theoretically
• Every computational problem can be solved with loops, arrays, non-recursive functions, and an unlimited amount of memory.
• I.e., in Fortran!
• In reality, most real-life problems are much, much too hard to solve that way
![Page 7: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/7.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 7
Common Data Structures forReal-Life Problems
• Linked lists• One-way• Doubly-linked• Circular
• Trees• Binary• Multiple branches
• Hash Tables• Combine arrays and linked list• Especially for searching for objects by value
![Page 8: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/8.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 8
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).
![Page 9: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/9.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 9
Linked List
struct listItem {type payload;struct listItem *next;
};
payload
next
payload
next
payload
next
payload
next
Note: payload may be
multiple members.
![Page 10: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/10.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 10
Linked List (continued)
• Items of list are usually same type• Generally obtained from malloc()
• Each item points to next item• Last item points to null• Need “head” to point to first item!
• “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 (see p. 214)
![Page 11: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/11.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 11
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”
![Page 12: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/12.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 12
Linked List (continued)
struct listItem {type payload;struct listItem *next;
};struct listItem *head;
payload
nextpayload
nextpayload
next
payload
next
![Page 13: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/13.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 13
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
nextpayload
nextpayload
next
payload
next
payload
next
![Page 14: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/14.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 14
Adding an Item to a List
listItem *addAfter(listItem *p, listItem *q){q -> next = p -> next;p -> next = q;return p;
}
payload
nextpayload
nextpayload
next
payload
next
payload
next
![Page 15: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/15.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 15
Adding an Item to a List
listItem *addAfter(listItem *p, listItem *q){q -> next = p -> next;p -> next = q;return p;
}
payload
nextpayload
nextpayload
next
payload
next
payload
next
![Page 16: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/16.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 16
Adding an Item to a List
listItem *addAfter(listItem *p, listItem *q){q -> next = p -> next;p -> next = q;return p;
}
payload
nextpayload
nextpayload
next
payload
next
payload
next
![Page 17: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/17.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 17
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
nextpayload
nextpayload
next
payload
next
payload
next
Note test for non-null p and q
![Page 18: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/18.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 18
What about Adding an Itembefore another Item?
struct listItem *p;• Add an item before item pointed to by p (p != NULL)
payload
nextpayload
nextpayload
next
payload
next
payload
next
![Page 19: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/19.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 19
What about Adding an Itembefore another Item?
• Answer:–– Need to search list from beginning to find
previous item– Add new item after previous item
![Page 20: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/20.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 20
Doubly-Linked List
struct listItem {type payload;listItem *prev;listItem *next;
};struct listItem *head, *tail;
prev next
payload
prev next
payloadprev next
payload
prev next
payload
In-class exercise
:– how to
add a new item q after a lis
t
item p
![Page 21: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/21.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 21
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
![Page 22: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/22.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 22
Questions?
![Page 23: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/23.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 23
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
![Page 24: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/24.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 24
Binary Tree
• A linked list but with two links per item
struct treeItem {type payload;treeItem *left; treeItem *right;
};
left right
payload
left right
payloadleft right
payload
left right
payloadleft right
payloadleft right
payload
left right
payload
![Page 25: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/25.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 25
Binary Tree (continued)
• Binary tree needs a rootstruct treeItem {type payload;treeItem *left; treeItem *right;
};
struct treeItem *root;
• Binary trees often drawn with root at top!• Unlike ordinary trees in the forest
• More like the root systems of a tree
![Page 26: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/26.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 26
Binary Tree
struct treeItem {type payload;treeItem *left; treeItem *right;};
struct treeItem *root;
left right
payload
left right
payloadleft right
payload
left right
payloadleft right
payloadleft right
payload
left right
payload
![Page 27: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/27.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 27
Purpose of a Tree
• (Potentially) a very large data structure• Capable of storing very many items
• Need to find items by value• I.e., need to search through the data structure to see
if it contains an item with the value we want
• Need to add new items• If value is not already in the tree, add a new item …• …so that it can be easily found in future
• Why not use a linked list?
![Page 28: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/28.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 28
Searching and Adding to a Binary Tree• Look recursively down
sequence of branches until either– Desired node is found; or– Null branch is encountered
• Replace with ptr to new item
• Decide which branch to follow based on payload
left right
payload
left right
payloadleft right
payload
left right
payloadleft right
payloadleft right
payload
left right
payload
![Page 29: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/29.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 29
Example — Searching a Tree
typedef struct _treeItem {char *word; // part of payloadint count; // part of payload_treeItem *left, *right;} treeItem;
treeItem *findItem(treeItem *p, char *w) {if (p == NULL)
return NULL; // item not found
int c = strcmp(w, p->word);if (c == 0)
return p;else if (c < 0)
return findItem(p->left, w);else
return findItem(p->right, w);}
![Page 30: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/30.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 30
Why do this?
Example — Adding an Item
treeItem *addItem(treeItem *p, char *w) {if (p == NULL){
p = malloc(sizeof(treeItem));char *c = malloc(strlen(w)+1);p->word = strcpy(c, w); p->count = 1;p->left = p->right = NULL;return p;
};int c = strcmp(w, p->word);if (c == 0)
p->count++;else if (c < 0)
p->left = addItem(p->left, w);else
p->right = addItem(p->right, w);return p;
}
![Page 31: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/31.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 31
Binary Tree
• Question:– how many calls to addItem for a tree with 106 nodes?– Assume balanced
– I.e., approx same number of nodes on each subtree
left right
payload
left right
payloadleft right
payload
left right
payloadleft right
payloadleft right
payload
left right
payload
![Page 32: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/32.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 32
Observation
• Problems like this occur in real life all the time
• Need to maintain a lot of data• Usually random
• Need to search through it quickly
• Need to add (or delete) items dynamically
• Need to sort “on the fly”• I.e., as you are adding and/or deleting items
![Page 33: Data Structures — Lists and Trees CS-2301, B-Term 20091 Data Structures — Lists and Trees CS-2301, System Programming for Non-Majors (Slides include materials.](https://reader035.fdocuments.in/reader035/viewer/2022062407/56649da25503460f94a8f758/html5/thumbnails/33.jpg)
Data Structures — Lists and Trees
CS-2301, B-Term 2009 33
Questions?