0% found this document useful (0 votes)
171 views

EE 2204 - Data Structures and Algorithms: N Radhakrishnan Assistant Professor Anna University, Chennai

The document discusses the topics of data structures and algorithms that will be covered in the EE 2204 course. It provides definitions and classifications of data structures, as well as an overview of abstract data types (ADTs), lists as an example ADT, and different implementations of lists including arrays and linked lists. Algorithms are also defined. The key topics covered are data structures, ADTs, lists, and different implementations of lists such as arrays and linked lists.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
171 views

EE 2204 - Data Structures and Algorithms: N Radhakrishnan Assistant Professor Anna University, Chennai

The document discusses the topics of data structures and algorithms that will be covered in the EE 2204 course. It provides definitions and classifications of data structures, as well as an overview of abstract data types (ADTs), lists as an example ADT, and different implementations of lists including arrays and linked lists. Algorithms are also defined. The key topics covered are data structures, ADTs, lists, and different implementations of lists such as arrays and linked lists.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 83

EE 2204 - Data Structures

and Algorithms

N Radhakrishnan
Assistant Professor
Anna University, Chennai
Topics
 Introduction
 Definitions
 Classification of Data Structures
 Arrays and Linked Lists
 Abstract Data Types [ADT]
• The List ADT
 Array-based Implementation
 Linked List Implementation
 Cursor-based Implementation
 Doubly Linked Lists

August 13, 2021 Anna University, Chennai - 600 025 2


Data Structure [Wikipedia]

 Data Structure is a particular way of storing


and organizing data in a computer so that it
can be used efficiently.
 Different kinds of data structures are suited
to different kinds of applications.
 Storing and retrieving can be carried out on
data stored in both main memory and in
secondary memory.

August 13, 2021 Anna University, Chennai - 600 025 3


Merriam-Webster's Definition

 Way in which data are stored for efficient


search and retrieval.
 The simplest data structure is the one-
dimensional (linear) array.
 Data items stored non-consecutively in
memory may be linked by pointers.
 Many algorithms have been developed for
storing data efficiently

August 13, 2021 Anna University, Chennai - 600 025 4


Algorithms [Wikipedia]

 An algorithm is a step-by-step procedure for


calculations.
 An algorithm is an effective method
expressed as a finite list of well-defined
instructions for calculating a function.
 The transition from one state to the next is
not necessarily deterministic; some
algorithms incorporate random input.

August 13, 2021 Anna University, Chennai - 600 025 5


Merriam-Webster's Definition

 Procedure that produces the answer to a


question or the solution to a problem in a
finite number of steps.
 An algorithm that produces a yes or no
answer is called a decision procedure; one
that leads to a solution is a computation
procedure.
 Example: A mathematical formula and the
instructions in a computer program

August 13, 2021 Anna University, Chennai - 600 025 6


Data Structure Classification
 Primitive / Non-primitive
• Basic Data Structures available / Derived from
Primitive Data Structures
 Homogeneous / Heterogeneous
• Elements are of the same type / Different types
 Static / Dynamic
• memory is allocated at the time of compilation /
run-time
 Linear / Non-linear
• Maintain a Linear relationship between element

August 13, 2021 Anna University, Chennai - 600 025 7


ADT - General Concept

 Problem solving with a computer means


processing data
 To process data, we need to define the data
type and the operation to be performed on
the data
 The definition of the data type and the
definition of the operation to be applied to
the data is part of the idea behind an
Abstract Data Type (ADT)

August 13, 2021 Anna University, Chennai - 600 025 8


ADT - General Concept

 The user of an ADT needs only to know that


a set of operations are available for the data
type, but does not need to know how they
are applied
 Several simple ADTs, such as integer, real,
character, pointer and so on, have been
implemented and are available for use in
most languages

August 13, 2021 Anna University, Chennai - 600 025 9


Data Types

 A data type is characterized by:


• A set of values
• A data representation, which is common to all
these values, and
• A set of operations, which can be applied
uniformly to all these values

August 13, 2021 Anna University, Chennai - 600 025 10


Primitive Data Types
 Languages like ‘C’ provides the following
primitive data types:
• boolean
• char, byte, int
• float, double
 Each primitive type has:
• A set of values
• A data representation
• A set of operations
 These are “set in stone”.
August 13, 2021 Anna University, Chennai - 600 025 11
ADT Definition [Wikipedia]

 In computer science, an abstract data type


(ADT) is a mathematical model for a certain
class of data structures that have similar
behavior.
 An abstract data type is defined indirectly,
only by the operations that may be
performed on it and by mathematical
constraints on the effects (and possibly cost)
of those operations.

August 13, 2021 Anna University, Chennai - 600 025 12


ADT Definition [Wikipedia]
 An ADT may be implemented by specific data
types or data structures, in many ways and
in many programming languages; or
described in a formal specification language.
 example, an abstract stack could be defined
by three operations:
• push, that inserts some data item onto the
structure,
• pop, that extracts an item from it, and
• peek, that allows data on top of the structure to
be examined without removal.
August 13, 2021 Anna University, Chennai - 600 025 13
Definition from techforum4you

 Abstract data types or ADTs are a


mathematical specification of a set of data
and the set of operations that can be
performed on the data.
 They are abstract in the sense that the focus
is on the definitions and the various
operations with their arguments.
 The actual implementation is not defined,
and does not affect the use of the ADT.

August 13, 2021 Anna University, Chennai - 600 025 14


ADT in Simple Words

 Definition:
• Is a set of operation
• Mathematical abstraction
• No implementation detail
 Example:
• Lists, sets, graphs, stacks are examples of
ADT along with their operations

August 13, 2021 Anna University, Chennai - 600 025 15


Why ADT?
 Modularity
• divide program into small functions
• easy to debug and maintain
• easy to modify
• group work
 Reuse
• do some operations only once
 Easy to change the implementation
• transparent to the program

August 13, 2021 Anna University, Chennai - 600 025 16


Implementing an ADT
 To implement an ADT, you need to choose:
• A data representation
 must be able to represent all necessary values of the
ADT
 should be private
• An algorithm for each of the necessary operation:
 must be consistent with the chosen representation
 all auxiliary (helper) operations that are not in the
contract should be private
 Remember: Once other people are using it
• It’s easy to add functionality

August 13, 2021 Anna University, Chennai - 600 025 17


The List ADT
 The List is an
• Ordered sequence of data items called
elements
• A1, A2, A3, …,AN is a list of size N
• size of an empty list is 0
• Ai+1 succeeds Ai
• Ai-1 preceeds Ai
• Position of Ai is i
• First element is A1 called “head”
• Last element is AN called “tail”

August 13, 2021 Anna University, Chennai - 600 025 18


Operations on Lists

 MakeEmpty
 PrintList
 Find
 FindKth
 Insert
 Delete
 Next
 Previous

August 13, 2021 Anna University, Chennai - 600 025 19


List – An Example

 The elements of a list are 34, 12, 52, 16, 12


• Find (52) -> 3
• Insert (20, 4) -> 34, 12, 52, 20, 16, 12
• Delete (52) -> 34, 12, 20, 16, 12
• FindKth (3) -> 20

August 13, 2021 Anna University, Chennai - 600 025 20


List - Implementation

 Lists can be implemented using:


• Arrays
• Linked List
• Cursor [Linked List using Arrays]

August 13, 2021 Anna University, Chennai - 600 025 21


Arrays

 Array is a static data structure that


represents a collection of fixed number of
homogeneous data items or
 A fixed-size indexed sequence of elements,
all of the same type.
 The individual elements are typically stored
in consecutive memory locations.
 The length of the array is determined when
the array is created, and cannot be changed.

August 13, 2021 Anna University, Chennai - 600 025 22


Arrays

 Any component of the array can be inspected


or updated by using its index.
• This is an efficient operation
• O(1) = constant time
 The array indices may be integers (C, Java)
or other discrete data types (Pascal, Ada).
 The lower bound may be zero (C, Java), one
(Fortran), or chosen by the programmer
(Pascal, Ada)

August 13, 2021 Anna University, Chennai - 600 025 23


Different Types of Arrays

 One-dimensional array: only one index is


used
 Multi-dimensional array: array involving
more than one index
 Static array: the compiler determines how
memory will be allocated for the array
 Dynamic array: memory allocation takes
place during execution

August 13, 2021 Anna University, Chennai - 600 025 24


One Dimensional Static Array

 Syntax:
• ElementType arrayName [CAPACITY];
• ElementType arrayName [CAPACITY] =
{ initializer_list };
 Example in C++:
• int b [5];
• int b [5] = {19, 68, 12, 45, 72};

August 13, 2021 Anna University, Chennai - 600 025 25


Array Output Function

void display(int array[],int num_values)


{
for (int I = 0; i<num_values; i++)
cout<< array[i] << “ ”;
}

August 13, 2021 Anna University, Chennai - 600 025 26


List Implemented Using Array

August 13, 2021 Anna University, Chennai - 600 025 27


Operations On Lists

 We’ll consider only few operations


and not all operations on Lists
 Let us consider Insert
 There are two possibilities:
• Ordered List
• Unordered List

August 13, 2021 Anna University, Chennai - 600 025 28


Insertion into an Ordered List

August 13, 2021 Anna University, Chennai - 600 025 29


Insertion in Detail

August 13, 2021 Anna University, Chennai - 600 025 30


Insertion

August 13, 2021 Anna University, Chennai - 600 025 31


Deletion

August 13, 2021 Anna University, Chennai - 600 025 32


Find / Search
 Searching is the process of looking for a specific element
in an array
 For example, discovering whether a certain score is
included in a list of scores.
 Searching, like sorting, is a common task in computer
programming.
 There are many algorithms and data structures devoted
to searching.
 The most common one is the linear search.

August 13, 2021 Anna University, Chennai - 600 025 33


Linear Search

 The linear search approach compares the given value


with each element in the array.
 The method continues to do so until the given value
matches an element in the list or the list is exhausted
without a match being found.
 If a match is made, the linear search returns the index of
the element in the array that matches the key.
 If no match is found, the search returns -1.

August 13, 2021 Anna University, Chennai - 600 025 34


Linear Search

August 13, 2021 Anna University, Chennai - 600 025 35


Linear Search Function

int LinearSearch (int a[], int n, int key)


{
int i;
for(i=0; i<n; i++)
{
if (a[i] == key)
return i;
}
return -1;
}

August 13, 2021 Anna University, Chennai - 600 025 36


Using the Function

 LinearSearch (a,n,item,loc)
 Here "a" is an array of the size n.
 This algorithm finds the location of the
element "item" in the array "a".
 If search item is found, it sets loc to the
index of the element; otherwise, it sets loc
to -1
 index=linearsearch(array, num, key)

August 13, 2021 Anna University, Chennai - 600 025 37


PrintList Operation

int myArray [5] = {19,68,12,45,72};


/* To print all the elements of the array
for (int i=0;i<5;i++)
{
printf("%d", myArray[i]);
}

August 13, 2021 Anna University, Chennai - 600 025 38


August 13, 2021 Anna University, Chennai - 600 025 39
Implementing Deletion

August 13, 2021 Anna University, Chennai - 600 025 40


Deletion - Another Method

August 13, 2021 Anna University, Chennai - 600 025 41


Operations Running Times
PrintList O(N)
Find

Insert O(N) (on avarage half


Delete needs to be moved)

FindKth
Next O(1)
Previous

August 13, 2021 Anna University, Chennai - 600 025 42


Disadvantages of Using Arrays

 Need to define a size for array


• High overestimate (waste of space)
 insertion and deletion is very slow
• need to move elements of the list
 redundant memory space
• it is difficult to estimate the size of array

August 13, 2021 Anna University, Chennai - 600 025 43


Linked List
 Series of nodes
• not adjacent in memory
• contain the element and a pointer to a node
containing its succesor
 Avoids the linear cost of insertion and
deletion!

August 13, 2021 Anna University, Chennai - 600 025 44


Singly Linked List

August 13, 2021 Anna University, Chennai - 600 025 45


Doubly Linked List

August 13, 2021 Anna University, Chennai - 600 025 46


Singly Linked List

August 13, 2021 Anna University, Chennai - 600 025 47


Singly-linked List - Addition

 Insertion into a singly-linked list has two


special cases.
 It's insertion a new node before the head (to
the very beginning of the list) and after the
tail (to the very end of the list).
 In any other case, new node is inserted in
the middle of the list and so, has a
predecessor and successor in the list.

August 13, 2021 Anna University, Chennai - 600 025 48


Empty list case
 When list is empty,
which is indicated by
(head == NULL)
condition, the
insertion is quite
simple.
 Algorithm sets both
head and tail to
point to the new
node.

August 13, 2021 Anna University, Chennai - 600 025 49


Add first
 In this case, new node is inserted right
before the current head node.

August 13, 2021 Anna University, Chennai - 600 025 50


Add First - Step 1
 It can be done in two steps:
• Update the next link of the new node, to point to
the current head node.

August 13, 2021 Anna University, Chennai - 600 025 51


Add First - Step 2

• Update head link to point to the new node.

August 13, 2021 Anna University, Chennai - 600 025 52


August 13, 2021 Anna University, Chennai - 600 025 53
Add last

 In this case, new node is inserted right after


the current tail node.

 It can be done in two steps:

• Update the next link of the current tail node, to


point to the new node.
• Update tail link to point to the new node.

August 13, 2021 Anna University, Chennai - 600 025 54


August 13, 2021 Anna University, Chennai - 600 025 55
Insert - General Case
 In general case, new node is always inserted
between two nodes, which are already in the
list. Head and tail links are not updated in
this case.
 We need to know two nodes "Previous" and
"Next", between which we want to insert the
new node.
 This also can be done in two steps:
• Update link of the "previous" node, to point to the new
node.
• Update link of the new node, to point to the "next" node.

August 13, 2021 Anna University, Chennai - 600 025 56


August 13, 2021 Anna University, Chennai - 600 025 57
Singly-linked List - Deletion

 There are four cases, which can occur while


removing the node.
 We have the same four situations, but the
order of algorithm actions is opposite.
 Notice, that removal algorithm includes the
disposal of the deleted node - unnecessary in
languages with automatic garbage collection
(Java).

August 13, 2021 Anna University, Chennai - 600 025 58


List has only one node
 When list has only
one node, that the
head points to the
same node as the
tail, the removal is
quite simple.
 Algorithm disposes
the node, pointed
by head (or tail)
and sets both head
and tail to NULL.

August 13, 2021 Anna University, Chennai - 600 025 59


Remove First

 In this case, first node (current head node) is


removed from the list.
 It can be done in two steps:
• Update head link to point to the node, next to the
head.
• Dispose removed node.

August 13, 2021 Anna University, Chennai - 600 025 60


August 13, 2021 Anna University, Chennai - 600 025 61
Remove Last
 In this case, last node (current tail node) is
removed from the list. This operation is a bit
more tricky, than removing the first node,
because algorithm should find a node, which
is previous to the tail first.
 It can be done in three steps:
• Update tail link to point to the node, before the
tail. In order to find it, list should be traversed
first, beginning from the head.
• Set next link of the new tail to NULL.
• Dispose removed node.

August 13, 2021 Anna University, Chennai - 600 025 62


August 13, 2021 Anna University, Chennai - 600 025 63
Remove - General Case

 In general case, node to be removed is


always located between two list nodes. Head
and tail links are not updated in this case.
 We need to know two nodes "Previous" and
"Next", of the node which we want to delete.
 Such a removal can be done in two steps:
• Update next link of the previous node, to point to
the next node, relative to the removed node.
• Dispose removed node.

August 13, 2021 Anna University, Chennai - 600 025 64


August 13, 2021 Anna University, Chennai - 600 025 65
Advantages of Using Linked Lists

 Need to know where the first node is


• the rest of the nodes can be accessed
 No need to move the elements in the list
for insertion and deletion operations
 No memory waste

August 13, 2021 Anna University, Chennai - 600 025 66


Cursor Implementation

Problems with linked list implementation:


 Same language do not support pointers!

• Then how can you use linked lists ?


 new and free operations are slow
• Actually not constant time
 SOLUTION: Implement linked list on an array -
called CURSOR

August 13, 2021 Anna University, Chennai - 600 025 67


Cursor Implementation - Diagram

August 13, 2021 Anna University, Chennai - 600 025 68


Cursor Implementation

If L = 5, then L represents list (A, B, E)


If M = 3, then M represents list (C, D, F)
August 13, 2021 Anna University, Chennai - 600 025 69
Arrays - Pros and Cons

 Pros
• Directly supported by C
• Provides random access
 Cons
• Size determined at compile time
• Inserting and deleting elements is
time consuming

August 13, 2021 Anna University, Chennai - 600 025 70


Linked Lists - Pros and Cons

 Pros
• Size determined during runtime
• Inserting and deleting elements is
quick
 Cons
• No random access
• User must provide programming
support

August 13, 2021 Anna University, Chennai - 600 025 71


Application of Lists

 Lists can be used


 To store the records sequentially
 For creation of stacks and queues
 For polynomial handling
 To maintain the sequence of operations
for do / undo in software
 To keep track of the history of web sites
visited

August 13, 2021 Anna University, Chennai - 600 025 72


Why Doubly Linked List ?

 given only the pointer location, we cannot access its


predecessor in the list.
 Another task that is difficult to perform on a linear
linked list is traversing the list in reverse.
 Doubly linked list A linked list in which each node is
linked to both its successor and its predecessor
 In such a case, where we need to access the node
that precedes a given node, a doubly linked list is
useful.

August 13, 2021 Anna University, Chennai - 600 025 73


Doubly Linked List

 In a doubly linked list, the nodes are linked


in both directions. Each node of a doubly
linked list contains three parts:
• Info: the data stored in the node
• Next: the pointer to the following node
• Back: the pointer to the preceding node

August 13, 2021 Anna University, Chennai - 600 025 74


Operations on Doubly Linked Lists

 The algorithms for the insertion and deletion


operations on a doubly linked list are
somewhat more complicated than the
corresponding operations on a singly linked
list.
 The reason is clear: There are more pointers
to keep track of in a doubly linked list.

August 13, 2021 Anna University, Chennai - 600 025 75


Inserting Item

 As an example, consider the Inserting an


item.
 To link the new node, after a given node, in
a singly linked list, we need to change two
pointers:
• newNode->next and
• location->next.
 The same operation on a doubly linked list
requires four pointer changes.

August 13, 2021 Anna University, Chennai - 600 025 76


Singly Linked List Insertion

August 13, 2021 Anna University, Chennai - 600 025 77


Doubly Linked List Insertion

August 13, 2021 Anna University, Chennai - 600 025 78


The Order is Important

August 13, 2021 Anna University, Chennai - 600 025 79


Doubly Linked List - Deletion

 One useful feature of a doubly linked list is


its elimination of the need for a pointer to a
node's predecessor to delete the node.
 Through the back member, we can alter the
next member of the preceding node to make
it jump over the unwanted node.
 Then we make the back pointer of the
succeeding node point to the preceding node.

August 13, 2021 Anna University, Chennai - 600 025 80


Doubly Linked List - Deletion

August 13, 2021 Anna University, Chennai - 600 025 81


Special Cases of Deletion

 We do, however, have to be careful about


the end cases:
• If location->back is NULL, we are deleting the
first node
• if location->next is NULL, we are deleting the last
node.
• If both location->back and location->next are
NULL, we are deleting the only node.

August 13, 2021 Anna University, Chennai - 600 025 82


Interaction

August 13, 2021 Anna University, Chennai - 600 025 83

You might also like

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy