Linked list in C and Cplusplus

18 164 0
Linked list in C and Cplusplus

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Linked Lists in C and C++ CS-2303, C-Te rm 2010 1 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) Linked Lists in C and C++ CS-2303, C-Te rm 2010 2 Common Data Structures in C and C++ • Linked lists – D&D §12.4–12.6 (not in K&R) • One-way • Doubly-linked • Circular • Trees – D&D §12.7, K&R §6.5 • Binary • Multiple branches • Hash Tables – K&R §6.6 (not in D&D) • Combine arrays and linked list • Especially for searching for objects by value Linked Lists in C and C++ CS-2303, C-Te rm 2010 3 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 N o t e : e l e m e n t s a r e u s u a l l y t h e s a m e t y p e ( b u t n o t a l w a y s ) . Linked Lists in C and C++ CS-2303, C-Te rm 2010 4 Linked List struct listItem { type payload; struct listItem *next; }; payload next payload next payload next payload next N o t e : p a y l o a d m a y b e m u l t i p l e m e m b e r s . Linked Lists in C and C++ CS-2303, C-Te rm 2010 5 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) Linked Lists in C and C++ CS-2303, C-Te rm 2010 6 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” Linked Lists in C and C++ CS-2303, C-Te rm 2010 7 Linked List (continued) struct listItem { type payload; struct listItem *next; }; struct listItem *head; payload next payload next payload next payload next Linked Lists in C and C++ CS-2303, C-Te rm 2010 8 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 Linked Lists in C and C++ CS-2303, C-Te rm 2010 9 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 Linked Lists in C and C++ CS-2303, C-Te rm 2010 10 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 [...]... 2010 Linked Lists in C and C+ + 13 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 • This is needed in PA#3 – Insert item after earlier event times and before later ones – Need to search the list CS-2303, C- Te rm 2010 Linked Lists in C and C+ + 14 Doubly -Linked List struct listItem { type payload; listItem... 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 CS-2303, C- Te rm 2010 Linked Lists in C and C+ + 16 Optional:– struct listItem *head; Circular List struct listItem *tail; payload next payload next payload next payload next listItem *addAfter (listItem *p, listItem *tail){... *prev; listItem *next; }; struct listItem *head, *tail; payload prev next o w t lis t ho a :– r ise afte c xer m q e te ss i cla new In- a ad d p m ite payload prev next payload prev prev next CS-2303, C- Te rm 2010 payload Linked Lists in C and C+ + 15 next Other Kinds of List Structures • Queue — FIFO (First In, First Out) • Items added at end • Items removed from beginning • Stack — LIFO (Last In, First...Adding an Item toWhatList if we cannot Question: a to do guarantee that p and q are non-NULL? 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 CS-2303, C- Te rm 2010 Linked Lists in C and C+ + 11 q and (continued) lp Adding an Item toon-nul a List r st fo t e te n No listItem *addAfter(listItem... *addAfter (listItem *p, listItem *tail){ if (p && tail) { p -> next = tail -> next; tail = p; } else if (p) { tail p -> next = p; } return tail; } CS-2303, C- Te rm 2010 Linked Lists in C and C+ + 17 Questions? CS-2303, C- Te rm 2010 Linked Lists in C and C+ + 18 ... *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 CS-2303, C- Te rm 2010 Linked Lists in C and C+ + 12 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 CS-2303, C- Te . Linked Lists in C and C+ + CS-2303, C- Te rm 2010 1 Linked Lists in C and C+ + CS-2303 System Programming Concepts (Slides include materials from The C Programming Language, 2 nd . Kernighan and Ritchie and from C: How to Program, 5 th and 6 th editions, by Deitel and Deitel) Linked Lists in C and C+ + CS-2303, C- Te rm 2010 2 Common Data Structures in C and C+ + • Linked lists. linked list • Especially for searching for objects by value Linked Lists in C and C+ + CS-2303, C- Te rm 2010 3 Definitions • Linked List • A data structure in which each element is dynamically

Ngày đăng: 24/10/2014, 01:17

Mục lục

    Linked Lists in C and C++

    Common Data Structures in C and C++

    Usage of Linked Lists

    Adding an Item to a List

    Adding an Item to a List (continued)

    What about Adding an Item before another Item?

    Other Kinds of List Structures

Tài liệu cùng người dùng

Tài liệu liên quan