1 / 9

Complex Structures

Complex Structures. Nested Structures Self referential structures A structure may have Data variables Internal structures/unions Pointer links Function pointers. struct course { int course_num; struct student[20]; struct course *next; int (*average)(int []); };.

varen
Download Presentation

Complex Structures

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Complex Structures • Nested Structures • Self referential structures • A structure may have • Data variables • Internal structures/unions • Pointer links • Function pointers struct course { int course_num; struct student[20]; struct course *next; int (*average)(int []); };

  2. Dynamic Structures • Link Lists • A type of data structure that have its elements linked together • Generic on-demand dynamic structure • Easy manipulation, but may not be efficient • Trees • A type of data structures in which elements are connected in a tree form • Complex data structures • More efficient, use only if the number of elements are large

  3. Link Lists • Single Link Lists struct slink { int data; struct slink *next; }; head • Double Link lists struct dlink { int data; struct dlink *next; struct dlink *prev; }; head

  4. Other Link Lists • Hash link lists bin[size] • Other variants: queues and stacks • Queue: a link list grown at one end, shrink at another, i.e. FIFO • Stack: a LIFO link list

  5. Trees – binary trees root struct node { int data; struct node *left; struct node *right; }; left right height leaf

  6. More Trees • Tertiary Trees • Each node has three children • K-ary Trees • Each node has K children • B (Balanced)- Trees • A tree that maintains a balanced height as it grows/shrinks • …

  7. Sample Usage • Important functions • insert • delete • search • … • Maintain a dynamic structure of sorted numbers using any of the previous structures

  8. Double link list void insert (struct dlink *head, struct dlink *entry) { struct dlink *tmp; for (tmp = head->next; tmp!= head && tmp->data < entry->data; tmp = tmp->next); tmp->prev->next = entry; entry->prev= tmp->prev; tmp->prev = entry; entry->next = tmp; }; void delete (struct dlink *entry) { entry>next->prev = entry->prev; entry>prev->next = entry->next; entry->next = entry->prev = NULL; }; struct dlink * search (struct dlink *head, int val) { struct dlink * tmp; for (tmp = head->next; tmp!= head && tmp->data != val; tmp = tmp->next); return (tmp==head)? NULL : tmp; } int main() { struct dlink num[10] = { … }; struct dlink head={0, NULL, NULL}; for (int i=0; i<10; i++) insert (&head, &num[i]); … return 0; }

  9. Binary Search Tree void insert (struct node *root, struct node *entry) { /* where to insert is really algorithm dependent. A generic case only: entry is to replace the left node of head */ if (head->left) { entry->left = head->left->left; entry->right = head->left->right; } head->left = entry; }; void delete (struct node *root, struct node *entry) { /* The key is to find a node that has an entry as a child */ }; struct node * search (struct node *root, int val) { if (!root) return NULL; else if (root->data != val) tmp = search(root->left, val); if (!tmp) tmp = search(root->right, val); return tmp; } int main() { struct node num[10] = { … }; struct node root = {0, NULL, NULL}; for (int i=0; i<10; i++) { insert (&root, &num[i]); } … return 0; }

More Related