1. Trang chủ
  2. » Công Nghệ Thông Tin

Linked list in C and Cplusplus

18 164 0

Đ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

Thông tin cơ bản

Định dạng
Số trang 18
Dung lượng 319,5 KB

Nội dung

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