32
Ceng-112 Data Structures I 1 Chapter 3 Linear Lists

Ceng-112 Data Structures I 1 Chapter 3 Linear Lists

Embed Size (px)

Citation preview

Ceng-112 Data Structures I 1

Chapter 3

LinearLists

Ceng-112 Data Structures I 2

Linear Lists

• Arrays are inefficient whenever sequenced data need to be

inserted or deleted.

• The linked list efficiently handles insertions and deletions.

• But it is inefficient for search and retrieval.

Ceng-112 Data Structures I 3

Figure 3-1

Linear Lists

Ceng-112 Data Structures I 4

Figure 3-2

Linear Lists

Operations are;1. Insertion2. Deletion3. Retrieval4. Traversal (exception for restricted lists).

Ceng-112 Data Structures I 5

Figure 3-3

Linear ListsInsertion

Ceng-112 Data Structures I 6

Figure 3-4

Linear ListsDeletion

Ceng-112 Data Structures I 7

Figure 3-5

Linear ListsRetrieval

Ceng-112 Data Structures I 8

Figure 3-6

Linked Lists

Ceng-112 Data Structures I 9

Linked Lists

• Advantage of linked lists;

– Data are easily inserted or deleted. It is not necessary to shift elements

of a linked list.

• Disadvantage of linked lists;

– We are limited to sequential searches.

Ceng-112 Data Structures I 10

Figure 3-7

• The elements in a linked list are called nodes. • The nodes in a linked list are called self-referential structures. In a selfreferential structure, each instance of the structure contains a pointer to another instance of the same structural type.

Linked Lists

Ceng-112 Data Structures I 11

Figure 3-8

Ceng-112 Data Structures I 12

Figure 3-9

Create List

Ceng-112 Data Structures I 13

Create List

Algorithm createList

Allocate dynamic memory for a linked list head node and returns its address to caller.

PRE Nothing

POST Head node allocated or error returned

RETURN head node pointer or null if memory overflow

1. if (memory available)

1. allocate (pNew)

2. pNew head =null pointer

3. pNewcount = 0

2. else

1. pNew = null pointer

3. return pNew

end createList

Ceng-112 Data Structures I 14

Insert Node

• Adds data to a linked list.

1. Allocate memory for the new node and insert data.

2. We need to know the location of the node that precedes the

new node.

1. If predecessor is null, it means that there is no predecessor to the

data being added or adding to an empty list or at the beginning of the

list.

2. Otherwise, adding to middle of the list or end of the list.

3. Point the new node’s predecessor to it.

Ceng-112 Data Structures I 15

Figure 3-10

Insert Node

Ceng-112 Data Structures I 16

Figure 3-11

Insert Node

Ceng-112 Data Structures I 17

Figure 3-12

Insert Node

Ceng-112 Data Structures I 18

Figure 3-13

Insert Node

Ceng-112 Data Structures I 19

Algorithm insertNode(val pList <head pointer>, val pPre <node pointer>,

val dataIn <dataType>)

Insert data into a new node in the linked list.

PRE pList is a pointer to a valid list head structure

pPre is a pointer to data’s logical predecessor

dataIn contains data to be inserted

POST data have been inserted in sequence

RETURN true if seccessful, false if memory overflow

Insert Node

Ceng-112 Data Structures I 20

1. allocate (pNew)

2. if (memory overflow) return false

3. pNewdata = dataIn

4. if (pPre null)

Adding before first node or to empty list.

1. pNewlink = pListhead

2. pListhead = pNew

5. else

Adding in middle or at end.

1. pNewlink = pPrelink

2. pPrelink = pNew

6. pListcount = pListcount + 1

7. return true

end insertNode

Insert Node

Ceng-112 Data Structures I 21

Figure 3-14

Delete Node

Ceng-112 Data Structures I 22

Figure 3-15

Delete Node

Ceng-112 Data Structures I 23

Algorithm deleteNode(val pList <head pointer>, val pPre <node pointer>,

val pLoc <node pointer>, ref dataOut <dataType>)

Deletes data from a linked list and returns it to calling module.

PRE pList is a pointer to a valid list head structure

pPre is a pointer to predecessor node

pLoc is a pointer to node to be deleted

dataOut is address to pass deleted data to calling module

POST data have been deleted and return to caller

Delete Node

Ceng-112 Data Structures I 24

1. dataOut = pLocdata

2. if (pPre null)

Deleting firt node.

1. pListhead = pLoclink

3. else

Deleting in middle or at end.

1. pPrelink = pLoclink

4. pListcount = pListcount – 1

5. release pLoc

6. return

end deleteNode

Delete Node

Ceng-112 Data Structures I 25

Figure 3-16

Search List

Ceng-112 Data Structures I 26

Algorithm searchList(val pList <head pointer>, val pPre <node pointer>,

val pLoc <node pointer>, ref target <key type>)

Searches list and passes back address of node containing target.

PRE pList is a pointer to a valid list head structure

pPre is a pointer variable to receive predecessor node

pLoc is a pointer to receive current node

target is the key being sought

POST pLoc points to first note with equal or greater than target key

or null if target > key of last node

pPre points to largest node smaller than key

or null if target < key of first node

Search List

Ceng-112 Data Structures I 27

1. pPre = null2. pLoc = pListhead3. loop (pLoc not null AND target > pLocdata.key

1. pPre = pLoc2. pLoc = pLoclink

Set return value4. if (pLoc is null)

1. found = false5. else

1. if (target equal pLocdata.key)1. found = true

2. else 1. found = false

6. return foundend searchList

Search List

Ceng-112 Data Structures I 28

Figure 3-17

Traverse List

pWalker = pListhead

loop (pWalker not null)

process(pWalkerdata)

pWalker = pWalkerlink

Ceng-112 Data Structures I 29

Algorithm traverse(val pList <head pointer>, val fromWhere <boolean>,

ref dataPtr <pointer to dataType>)

Traverses a linked list. Each call returns the location of an element in the list.

PRE pList is a pointer to a valid list head structure

fromWhere is 0 to start at the first element

dataPtr is the address of a pointer to data

POST address places in dataPtr and returns true or if end of list, returns false.

RETURN true if next element located, false if end of list.

Traverse List

Ceng-112 Data Structures I 30

1. if (fromWhere is 0) start from first1. if (pListcount is zero) return false2. else

1. pListpos = pListhead2. dataPtr = address(pListposdata)3. return true

2. elsestart from pos1. if (pListposlink is null)

end of list1. return false

2. else 1. pListpos = pListposlink2. dataPtr = address(pListposdata)3. return true

end traverse

Traverse List

Ceng-112 Data Structures I 31

Sample Definition

typedef struct node{ int number;

struct NODE *link;}NODE;

typedef struct{ int count;

NODE *pos;NODE *head;NODE *rear;

}LIST;

Ceng-112 Data Structures I 32

HW-3Create node structure to process the student

information. The student number should be the key info.

Follow the all remarks and instructions in your text book pages from 91 to 97 and build the your C codes to satisfy the defined requirements.

Load your HW-3 to FTP site until 29 Mar. 07 at 17:00.