260 likes | 383 Vues
This article delves into the essentials of linked lists, a fundamental data structure where elements are stored in an arbitrary order, connected by pointers. It explores various operations such as inserting and deleting nodes, emphasizing the linked representation's flexibility compared to arrays. The article also discusses types of linked lists, including singly, doubly, and circular linked lists, each with distinct characteristics and use cases. Understand how linked lists function in memory and learn about practical implementations, contributing to efficient data handling in programming.
E N D
Linked Lists list elements are stored, in memory, in an arbitrary order explicit information (called a link) is used to go from one element to the next
a b c d e c a e d b Memory Layout Layout of L = (a,b,c,d,e) using an array representation. A linked representation uses an arbitrary layout.
first Linked Representation c a e d b pointer (or link) in e is NULL use a variable first to get to the first element a
first NULL a b c d e Normal Way To Draw A Linked List link or pointer field of node data field of node
Chain first NULL a b c d e A chain is a linked list in which each node represents one element. There is a link or pointer from one element to the next. The last node has a NULL (or 0) pointer.
link data Node Representation typedef struct listNode *listPointer; typedef struct { char data; listPointer link; } listNode;
first NULL a b c d e get(0) desiredNode = first; // gets you to first node return desiredNode->data;
first NULL a b c d e get(1) desiredNode = first->link; // gets you to second node return desiredNode->data;
first NULL a b c d e get(2) desiredNode = first->link->link; // gets you to third node return desiredNode->data;
first NULL a b c d e get(5) desiredNode = first->link->link->link->link->link; // desiredNode = NULL return desiredNode->data; // NULL.element
first NULL a b c d e Delete An Element delete(0) deleteNode = first; first = first->link; free(deleteNode);
first b beforeNode NULL a b d e c c c delete(2) first get to node just before node to be removed beforeNode = first->link;
delete(2) first null a b c d e save pointer to node that will be deleted beforeNode deleteNode = beforeNode->link;
delete(2) first null a b c d e now change pointer in beforeNode beforeNode beforeNode->link = beforeNode->link->link; free(deleteNode);
first NULL f a b c d e newNode insert(0,’f’) Step 1: get a node, set its data and link fields MALLOC( newNode, sizeof(*newNode)); newNode->data = ‘f’; newNode->link = NULL;
first NULL f a b c d e newNode insert(0,’f’) Step 2: update first first = newNode;
newNode f first NULL a b c d e c beforeNode insert(3,’f’) first find node whose index is 2 • next create a new node and set its data and link fields • finally link beforeNode to newNode
newNode f first NULL a b c d e beforeNode c insert(3,’f’) beforeNode = first->link->link; MALLOC( newNode, sizeof(*newNode)); newNode->data = ‘f’; newNode->link = beforeNode->link; beforeNode->link = newNode;
headerNode NULL a b c d e Chain With Header Node
Empty Chain With Header Node headerNode NULL
firstNode a b c d e Circular List
firstNode lastNode NULL NULL a b c d e Doubly Linked List
firstNode a b c d e Doubly Linked Circular List
headerNode a b c d e Doubly Linked Circular List With Header Node
Empty Doubly Linked Circular List With Header Node headerNode