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

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

• 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 • St

Trang 1

Linked Lists in C and C++

CS-2303 System Programming Concepts

(Slides include materials from The C Programming Language, 2nd edition, by Kernighan and Ritchie and

from C: How to Program, 5th and 6 th editions, by Deitel and Deitel)

Trang 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

Trang 3

• 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: ele

ments ar

e us ually

the

same typ

e (but n

ot alway

s).

Trang 4

Linked List

struct listItem {

type payload;

struct listItem *next;

};

payload

next

payload next

payload next

payload next

Note: pa

yload m

ay be

multiple

members

.

Trang 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)

Trang 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”

Trang 7

Linked List (continued)

struct listItem {

type payload;

struct listItem *next;

};

struct listItem *head;

payload

next

payload next

payload next

payload next

Trang 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

Trang 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

Trang 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

Trang 11

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

Question: What to do if we cannot

guarantee that p and q are non-NULL?

Trang 12

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

next

payload next

payload next

payload next

payload next

Note test

for non

-null p a

nd q

Trang 13

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

Trang 14

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

Trang 15

Doubly-Linked List

struct listItem {

type payload;

listItem *prev;

listItem *next;

};

struct listItem *head, *tail;

payload

payload

payload

payload

o

t

Trang 16

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

Trang 17

Circular List

listItem *addAfter (listItem *p, listItem *tail){

if (p && tail) {

p -> next = tail -> next;

tail = p;

} else if (p) {

tail p -> next = p;

}

payload

next

payload next

payload next

payload next

struct listItem *tail;

Optional:–

struct listItem *head;

Trang 18

Questions?

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