Linked Lists

Pointers

Singly Linked Lists

Dynamically Linked Stacks and Queues

Polynomials

Additional List Operations

Equivalence Relations

Sparse Matrices

Doubly Linked Lists

Generalized Lists

Pointers

•  Sequential representation

–  Disadvantages

•  Insertion & Deletion
•  Varying size

•  Linked representation

–  Singly/Doubly linked lists

Singly Linked Lists

•  Linked list

–  An ordered sequence of nodes with links

–  The nodes do not reside in sequential locations

–  The locations of the nodes may change on different runs

•  Linked list may be represented in mmemory: Data[ ], Link[ ]

Singly Linked Lists(Cont.)

•  Insertion

Singly Linked Lists (Cont.)

•  Deletion

Create and Use Linked Lists in C++

.Node Class

class ListNode{

friend class List;

private:

int data; //char data[3]

ListNode *Link;

};

.List Class

class List {

public:

//List manipulation operations

void create();

void insert();

void delete();

private:

ListNode *first;

};

.Creating a two-node list

//Program 4.3, example 4.2, page 172.

.ListNode constructor

//Program 4.3, example 4.2, page 172.

.Inserting a node

//Program 4.4, figure 4.11, example 4.3, page 173.

.Deleting a node

//Program 4.5, example 4.4, page 174.

Implementing Linked Lists with Templates

.Integer List

List<int> intlist;

.Float List

List<float> floatlist;

.Character List

List<char> charlist;

.Template definition of linked lists

//Program 4.6, page 176.

Circular Lists

•  Circular list: the link field of the last node points to the first

//Figure 4.13, page 184.

. The empty circular lists

//Figure 4.16, page 185.

Linked Stacks and Queues

.When we need multiple stacks and queues, linked stacks and linked queues are good solution.

A Representation of m Stacks

.A collection of m stacks

Stack *stack = new Stack[m];

.Stack class definition and adding a node and deleting top node

//program 4.15, program 4.16, program 4.17, page 188.

Polynomials

•  Polynomial representation

.Polynomial class definition and declaration of operator+( )

//program 4.20, page 191

. Implementation of operator+( )

//program 4.21, page 193

•  Example

–  a= 3x14+ 2x8+ 1

–  b= 8x14- 3x10+ 10x6

//figure 4.18: Polynomial representation, page 191.

//figure 4.19: Polynomial adding, C= a + b, page 192.

Additional List Operations

•  Reversing a chain

• Concatenates two chain

Circular Lists Representation of Polynomials

•  Representing polynomials

–  Nonezero polynomials: 3x14 + 2x8 + 1

Sparse Matrices

.Head field: to distinguish between head node and element node(false).

.The Head node for row i is also the head node for column i.

(a) head node (b) typical node

.Example:

Doubly Linked Lists

.If we have a problem in which moving in either direction is often necessary, then it is useful to have doubly linked lists.

Insertion into a Doubly Linked Circular List

.Program 4.35, page 219.

Deletion from a Doubly Linked Circular List

.Program 4.34, figure 4.31, page 219.

Generalized Lists

•  Generalized List

–  A generalized list, A, is a finite sequence of n>= 0 elements, a0,…,an-1, where ai is either an atom or a list.

•  Examples

–  D=()

–  A= (a, (b, c))

–  B= (A, A, ())

–  C= (a, C)

•  Consequences

–  lists may be shared by other lists (Example B)

–  lists may be recursive(Example C)

Generalized Lists(Cont.)

•  Represent polynomial

–  p(x,y,z)= x10y3z2+2x8y3z2+3x8y2z2+x4y4z+6x3y4z+2yz

•  Solution I

-

•  Solution II

–  Using general list

–  3x2y: See Figure 4.32, p233.

Summary

•  Lists

–  Singly/Doubly linked list

–  Circular

•  Singly/Doubly linked list

–  Linked lists with head

–  Generalized linked lists

•  Operations

–  Insertion, Deletion, Modification, Retrieval, Concatenation, etc.

9