Presentation is loading. Please wait.

Presentation is loading. Please wait.

ECE Application Programming

Similar presentations


Presentation on theme: "ECE Application Programming"— Presentation transcript:

1 16.216 ECE Application Programming
Instructor: Dr. Michael Geiger Fall 2012 Lecture 33: PE6: Dynamic memory allocation in data structures

2 ECE Application Programming: Lecture 33
Lecture outline Announcements/reminders Program 9 due today Program 10 posted, due 12/10 Will drop lowest grade Final exams: no common final Sec. 201 (12:00-12:50): Tues. 12/18, 8:00-11:00 AM, Kitson 301 Sec. 202 (1:00-1:50): Tues. 12/18, 3:00-6:00 PM, Ball 328 Today’s class: Dynamic memory allocation and data structures Dynamic memory allocation and structures Pointer-based structures Linked lists Adding data Finding data Deleting data Sorted linked lists Program 10: Doubly-linked lists 5/9/2018 ECE Application Programming: Lecture 33

3 Dynamic allocation and structures
Can use sizeof() to get # bytes in structure Examples (using StudentInfo struct): StudentInfo *p; p = (StudentInfo *)malloc(sizeof(StudentInfo)); StudentInfo *arr; int n; printf("Enter array size: "); scanf("%d", &n); arr = (StudentInfo *)malloc(n * sizeof(StudentInfo)); 5/9/2018 ECE Application Programming: Lecture 33

4 ECE Application Programming: Lecture 33
Data structures Data structure: way of storing and organizing data Arrays are one relatively inefficient example Other structures designed to optimize: Organizing / sorting data Adding new data Removing unwanted data Searching for data 5/9/2018 ECE Application Programming: Lecture 33

5 Pointer-based data structures
Many structures extensively use pointers Each element within structure contains data + pointer(s) to one or more other elements Usually functions for common operations Add new element Dynamically allocate new element Modify appropriate pointer(s) in other element(s) to point to new element Set pointer(s) in new element to point to other(s) Delete element Modify pointer(s) in other element(s) so they don’t point to element being removed Deallocate removed element Find element Follow pointers to move from one element to next 5/9/2018 ECE Application Programming: Lecture 33

6 ECE Application Programming: Lecture 33
Linked list Simple pointer-based structure: linked list Each element (node) contains data + pointer to next element in list Last element points to NULL Program using list needs pointer to first node Image source: 5/9/2018 ECE Application Programming: Lecture 33

7 Linked list definition
Structure to hold list of integers typedef struct node { int value; // Data struct node *next; // Pointer to // next node } LLnode; Note definition style has changed slightly Type “name” both before and after { } Name before (struct node) is necessary to use type inside structure definition Name after (LLnode) can be used in rest of program 5/9/2018 ECE Application Programming: Lecture 33

8 ECE Application Programming: Lecture 33
Adding to list Simplest form (unordered list): add new item to beginning of list LLnode *addNode(LLnode *list, int v) { LLnode *newNode; // Allocate space for new node; exit if error newNode = (LLnode *)malloc(sizeof(LLnode)); if (newNode == NULL) { fprintf(stderr, "Error: could not allocate new node\n"); exit(0); } newNode->value = v; // Copy value to new node newNode->next = list; // next points to old list return newNode; 5/9/2018 ECE Application Programming: Lecture 33

9 ECE Application Programming: Lecture 33
Examples Write functions for Finding item in list: LLnode *findNode(LLnode *list, int v); Function should return pointer to node if found Return NULL otherwise Removing item from list LLnode *delNode(LLnode *list, int v); Must deallocate space for deleted node Function should return pointer to start of list after it has been modified Note: removing first element in list is special case 5/9/2018 ECE Application Programming: Lecture 33

10 ECE Application Programming: Lecture 33
Sorted linked list Can ensure each item is sorted as it’s added Slower item insertion, but faster search Not easy with arrays: must move existing data Keeping linked list sorted Find appropriate location Often done by going “past” appropriate spot Modify pointers Node before correct spot points to new node New node points to node after correct spot Image source: 5/9/2018 ECE Application Programming: Lecture 33

11 ECE Application Programming: Lecture 33
Examples Write functions for: Adding item to sorted list: LLnode *addSortedNode(LLnode *list, int v); Use addNode() as a starting point Instead of adding node at beginning, find appropriate place in list and then add Function should return pointer to start of list after it has been modified Finding item in sorted list: LLnode *findSortedNode(LLnode *list, int v); Use findNode() as starting point—should perform same operation, but more efficiently Function should return pointer to node if found Return NULL otherwise 5/9/2018 ECE Application Programming: Lecture 33

12 Program 10: Doubly-linked lists
Each node (DLNode) points to node before and after itself in list Allows traversal of list in both directions Adding item slightly harder No need for add/delete functions to explicitly track previous node First and last nodes each point to NULL where appropriate Not shown: program maintains explicit pointers to first/last nodes Done in separate structure (DLList) 5/9/2018 ECE Application Programming: Lecture 33

13 Program 10: Doubly-linked lists (cont.)
Data in node is dynamically allocated string List is sorted by alphabetical order Recall: strcmp() / strncmp() will return non-zero values if strings aren’t equal If n = strcmp("add", "subtract")  n < 0 If n = strcmp("add", "aardvark")  n > 0 You will complete four functions Adding new word to list Deleting word from list (if present) Finding word in list (if present) Printing contents of entire list 5/9/2018 ECE Application Programming: Lecture 33

14 ECE Application Programming: Lecture 33
Next time Friday, 12/7: Office hours during lecture time 12:00-12:50, Kitson 301 1-1:50, Ball 328 Monday, 12/10: Exam Preview Will likely discuss Q&A session scheduling for week of exam (some time Monday, 12/17?) Course evaluations Will be posted on website Print and bring to final (or I’ll have hard copies there) Must turn in your evaluation to get the exam Reminders: Program 9 due today Program 10 posted, due 12/10 5/9/2018 ECE Application Programming: Lecture 33


Download ppt "ECE Application Programming"

Similar presentations


Ads by Google