44
ARRAY Vs LINKED LIST IN C BY S.PADMAVATHI ASSISTANT PROFESSOR DEPARTMENT OF INFORMATION TECHNOLOGY AMRITA VISHWA VIDYAPEETHAM

Data Structures

  • Upload
    amrita

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

ARRAY Vs LINKED LIST IN C

BYS.PADMAVATHI

ASSISTANT PROFESSORDEPARTMENT OF INFORMATION TECHNOLOGY

AMRITA VISHWA VIDYAPEETHAM

20/2/2002 S.Padmavathi, Amrita University. 2

��������������������������������

ARRAYSLINKED LIST – GENERAL CONCEPTSC FOR LINKED LISTLINKED LIST – CREATIONLINKED LIST – INSERTIONLINKED LIST – DELETION

20/2/2002 S.Padmavathi, Amrita University. 3

��������������������

� ARRAY IN C� INSERTION IN ARRAY� DELETION IN ARRAY

20/2/2002 S.Padmavathi, Amrita University. 4

����������������

� An array: int a[6]={5,12,7,3,4};

•Assigning: a[2]=10;

5 12 7 3 4

2000 2002 2004 2006 2008 2010

a[0] a[1] a[2] a[3] a[4] a[5]

5 12 10 3 4

2000 2002 2004 2006 2008 2010

a[0] a[1] a[2] a[3] a[4] a[5]

20/2/2002 S.Padmavathi, Amrita University. 5

•a[2]=0; This does not remove the integer a[2], it only makes the value 0.

•If continuity is needed elements has to be shifted eg. Delete a[2]

ARRAY DELETION

5 12 7 3 4

2000 2002 2004 2006 2008 2010

a[0] a[1] a[2] a[3] a[4] a[5]

3 4

a[2]=a[3] a[3]=a[4] a[4]=0

0

20/2/2002 S.Padmavathi, Amrita University. 6

ARRAY INSERTION

•Memory cannot be introduced for insertion, since fixed memory is allocated for arrays.

•elements has to be shifted back to create a space for inserting new element eg. Insert 1 before 7

5 12 7 3 4

2000 2002 2004 2006 2008 2010

a[0] a[1] a[2] a[3] a[4] a[5]

3 4

a[5]=a[4] a[4]=a[3] a[3]=a[2]

71

a[2]=1

20/2/2002 S.Padmavathi, Amrita University. 7

���� ��������� ��������� ��������� ���������

������������������������������������������������������������

� DESCRIPTION� CHARACTERISTICS OF LINKED

LIST� EXAMPLES

20/2/2002 S.Padmavathi, Amrita University. 8

���� �������� �������� �������� ����•Memory need not be continuous for the set of numbers

•Each number in a separate memory

•Continuity maintained by remembering next no.’s address (ie) pointer to next number – called Link

•Therefore one number is stored as 2 fields : one for the actual number, other for link – called node

10 Address of next node

Data Link (Pointer to next node)

NODE

20/2/2002 S.Padmavathi, Amrita University. 9

An External pointer stores the address of first node

An empty list is identified when this external pointer is NULL

Last node need not remember next node’s address. Therefore last node’s link field is NULL

CHARACTERISTICS OF LINKED LIST

NULL

EMPTY LIST

LIST

(External pointer)

LIST

(External pointer)

OR10001000

20/2/2002 S.Padmavathi, Amrita University. 10

FIRST NODE

10 NULL

FIRST NODE

2000

LIST

(External pointer)

2000 2002

10 NULL

FIRST NODE

LIST WITH ONE NODE

LIST

(External pointer)

2000 2002

2000 2002

1000

1000

10

20/2/2002 S.Padmavathi, Amrita University. 11

10 1008

3004 3006

Above diagram drawn in a single line, where arrow represent the pointer

Linked list with 3 nos. 5,10,4

2000

LIST

1000

LIST

1000

NULL4

1008 1010

LAST NODE

5 3004

2000 2002

FIRST NODE

FIRST NODE

5

2000 2002

10

3004 3006

4

LAST NODE

1008 1010

20/2/2002 S.Padmavathi, Amrita University. 12

���������� �������������� �������������� �������������� ����

� STRUCTURE FOR NODE� STRUCTURE VARIABLES� STRUCTURE POINTERS� MALLOC FUNCTION� FREE FUNCTION

20/2/2002 S.Padmavathi, Amrita University. 13

���� ������������� ������������� ������������� ���������

WITHOUT USING TYPEDEF

struct node {

int data;

struct node * link;

};

struct node * LIST;

USING TYPEDEF

struct nd{

int data;

struct nd *link;

};

typedef nd node;

node * LIST;

data linknode

20/2/2002 S.Padmavathi, Amrita University. 14

������������������������������������������������������������������������

struct node p,q;

q.data=20;

q.link=NULL;

p.data=10;

p.link=&q;

p

2000 2002

20 NULL

3010 3012

q2000 2002

p

3010 3012

q

(ie) *p.link is q , To access fields of q using p: (*p.link).data==q.data==20, (*p.link).link==q.link==NULL

p10 3010

2000 2002

20 NULL

3010 3012

q

20/2/2002 S.Padmavathi, Amrita University. 15

1000

������������ !�"!��#

STRUCTURE POINTERS

2000

1000

m10 3010

2000 2002

p20 NULL

3010 3012

qm=&p;

k=p.link;3010

1500

k

5000

m

1500

k s

s=m; 20005000

s

20/2/2002 S.Padmavathi, Amrita University. 16

m – pointer to structure , *m-structure

. to access members of structure, has higher precedence than *

*m. implies, dot operated first on m, (i.e) m. which means m should be a structure variable, not structure pointer, so error

(*m). Implies *operated first on m, (i.e) *m which means m is a pointer , refers to the variable(structure) m points to, dot is then operated on (*m) I.e. (*m). Used to refer the member of structure that m points to.

(*m).data- data member of structure - p that m points to.

*p. implies, dot operated first on p, (i.e) p. which means p should be a structure variable and p. refers the member of p, * is then operated, *(p.) means member of p is a pointer

p.link – refers link member of structure p

*p.link – refers to variable that link member of p points to, q

20/2/2002 S.Padmavathi, Amrita University. 17

10

2000 2002

p20

3010 3012

q

1000

m

1500

k

p,q are structure variables

m,k,s are structure pointers

5000

s

(*m) is p since m=&p,

(*m).data==p.data==m ->data

(*m).link==p.link==&q==m->link

(*m->link).data==q.data==m->link->data

20/2/2002 S.Padmavathi, Amrita University. 18

malloc ( sizeof (struct node))

(struct node *)malloc(sizeof (struct node))

2000 2002

2000

4 bytes

4 bytes

Returns 2000

Returns 2000

m=(struct node *)malloc(sizeof (struct node))

2000

1000

m

2000 2002 1000

m

2000 2002

MALLOC FUNCTION

20/2/2002 S.Padmavathi, Amrita University. 19

����������������������������������������������������

Used for deallocation of the memory Memory allocated by malloc or calloc only can be freed

1000

m

General syntax: free (structureptr_name)

Eg. free(m);

2000 20022000 2002

20/2/2002 S.Padmavathi, Amrita University. 20

���� ��������� ��������� ��������� �����$$$$

��������������������������������

� FIRST NODE� AFTER CREATING FIRST NODE� ENTIRE CODE

20/2/2002 S.Padmavathi, Amrita University. 21

LIST

1000

NULL

1500

q

2000 2002

���� ��������� ��������� ��������� ��������� ������������������������������������

p

1050

2000

10 NULL2000

k

5000

scanf(“%d”,&k);q=(struct node *)malloc(sizeof(struct node));q->link=NULL;p=q;list=q;if(list==NULL)while(k!=0){int k;q->data=k;

10

2000

20/2/2002 S.Padmavathi, Amrita University. 22

LIST

1000

NULL

1500

q

���� ��������� ��������� ��������� ��������� ������������������������������������

p

1050

2000

2000

k

5000

scanf(“%d”,&k);}q=(struct node *)malloc(sizeof(struct node));q->link=NULL;p=q;if(list==NULL)while(k!=0){q->data=k;

10

2000

20

2000 2002

10 NULL

2500

2500 2502

20

else p->link=q;

2500

2500

NULL

20/2/2002 S.Padmavathi, Amrita University. 23scanf(“%d”,&k); }

scanf(“%d”,&k);

q=(struct node *)malloc(sizeof(struct node));

q->link=NULL;

p=q; //q- new node to be insertedelse p->link=q;

list=q; // p- last node in listif(list==NULL) // for first node

while(k!=0) { // if input is 0, stop creation

struct node *p,*q;

q->data=k;

CREATION - CODE

int k;

20/2/2002 S.Padmavathi, Amrita University. 24

���� ��������� ��������� ��������� �����$$$$

������������������������������������

� INSERTION IN FRONT� CODE � DEMO

� INSERTION IN LAST� CODE� DEMO

� INSERTION AFTER NODE X� CODE� DEMO

20/2/2002 S.Padmavathi, Amrita University. 25

LINKED LIST –INSERTION (new node)

4000 4002

5 NULL

scanf(“%d”,&k);p=(struct node *)malloc(sizeof(struct node));

p->link=NULL; // p is the node to be insertedp->data=k;

p

1050

k

5000

4000

5

20/2/2002 S.Padmavathi, Amrita University. 26

if (list= = NULL)

list=p;

else

{ p->link=list;

list=p; }

if (list ! = NULL)

p->link=list;

list=p;

or

LIST

1000

NULL 5 NULL

4000 4002

p

1050

4000

LINKED LIST –INSERTION Code (Front)

List=NULL implies , new node is the first node

4000

20/2/2002 S.Padmavathi, Amrita University. 27

LINKED LIST –INSERTION (Front)

5 NULL

4000 4002

2000

LIST

1000

10 2500

2000 2002

NULL20

2500 2502

4000

2000

p

1050

4000

p->link=list;list=p;

20/2/2002 S.Padmavathi, Amrita University. 28

LINKED LIST –INSERTION Code (Last)

q=list; // q- last node in the list

while (q->link != NULL)

q=q->link;

q->link=p; }

if (list= = NULL) // empty list

list=p; // first node in empty list

else //move to last node

{

20/2/2002 S.Padmavathi, Amrita University. 29

LINKED LIST –INSERTION (Last)

5 NULL

4000 4002

2000

LIST

1000

10 2500

2000 2002

p

1050

4000

q=2000q->link=2500

NULL20

2500 2502

q

1500

q=list;

20002500

4000

q=2500q->link=NULL

while (q->link != NULL)q=q->link;q->link=NULLq->link=p;

20/2/2002 S.Padmavathi, Amrita University. 30

LINKED LIST –INSERTION (After node whose data is x)

if (list= = NULL) // empty list

{ q=list; while (q->link != NULL || q->data != x)

q=q->link; //move to next nodeif(q->data != x)

printf(“node not found”);else { p->link = q->link ; // q- node with data x

q->link=p ; } } // p- node to be inserted

printf(“empty list, node not found”);else // search for node x

//current node is not the last node or node’s data is not x

20/2/2002 S.Padmavathi, Amrita University. 31

30 NULL

1700 1702

2000

LIST

1000

10 2500

2000 2002

p

1050

4000

q=2000q->link=2500

170020

2500 2502

q

1500

20002500q=2500q->link=1700

LINKED LIST –INSERTION (After node x=20)

5 NULL

4000 4002

q=list;while (q->link != NULL || q->data != x)q=q->link; q->data=20

q->data=10q->data=20

4000

1700

if(q->data != x)else { p->link = q->link ;q->link=p ; }}

X=20

20/2/2002 S.Padmavathi, Amrita University. 32

30 NULL

1700 1702

2000

LIST

1000

10 2500

2000 2002

p

1050

4000

q=2000q->link=2500

170020

2500 2502

q

1500

20002500q=2500q->link=1700

LINKED LIST –INSERTION (After node x=30)

5 NULL

4000 4002

q=list;while (q->link != NULL || q->data != x)q=q->link;

q->data=10q->data=20

4000

NULL

while (q->link != NULL || q->data != x)

q=1700q->link=NULLq->data=30

q=q->link;

1700

q->link=NULLif(q->data != x) (q->data=x=30)else { p->link = q->link ;q->link=p ; }}

X=30

20/2/2002 S.Padmavathi, Amrita University. 33

30 NULL

1700 1702

2000

LIST

1000

10 2500

2000 2002

p

1050

4000

q=2000q->link=2500

170020

2500 2502

q

1500

20002500q=2500q->link=1700

LINKED LIST –INSERTION (After node x=8)

5 NULL

4000 4002

q=list;while (q->link != NULL || q->data != x)q=q->link;

q->data=10q->data=20

while (q->link != NULL || q->data != x)

q=1700q->link=NULLq->data=30

q=q->link;

1700

q->link=NULLif(q->data != x) (q->data=30,x=8)printf(“node not found”);

X=8

20/2/2002 S.Padmavathi, Amrita University. 34

���� ��������� ��������� ��������� �����$$$$

������ ������ ������ ������

� DELETION IN FRONT� CODE � DEMO

� DELETION IN LAST� CODE� DEMO

� DELETION AFTER NODE X� CODE � DEMO

20/2/2002 S.Padmavathi, Amrita University. 35

if (list= = NULL)

printf(“empty list , deletion not possible”);

else

{ p=list;

list=p->link;

free(p); }

LIST

1000

NULL

p

1050

LINKED LIST –DELETION Code (Front)

Empty list : node cannot be deleted

20/2/2002 S.Padmavathi, Amrita University. 36

5 NULL

4000 4002

One node in list:p

1050

p=list; //p- node to be deletedlist=p->link;free(p);

LIST

1000

4000

4000

NULL

4000 4002

20/2/2002 S.Padmavathi, Amrita University. 37

10 2500

2000 20022000 2002

30 NULL

1700 1702

p=2000p->link=2500

170020

2500 2502

p

1050

2000

LINKED LIST –DELETION (Front)

p=list;list=p->link;free(p);

2000

LIST

1000

2500

20/2/2002 S.Padmavathi, Amrita University. 38

if (list = = NULL) // empty list

printf(“empty list , deletion not possible”);

elseif ( list->link = = NULL) //only one node in list

LINKED LIST –DELETION Code (Last)

q=list; //q – node to be deletedwhile (q->link != NULL)

{ p=q; // p – node previous to q

p->link=NULL; q=q->link; }

free(q); }

list=NULL;

else { //move to last node

20/2/2002 S.Padmavathi, Amrita University. 39

30 NULL

1700 1702

2000

LIST

1000

10 2500

2000 2002

p

1050

q=2000

q->link=2500

170020

2500 2502

q

1500

20002500q=2500

q->link=1700

LINKED LIST –DELETION (Last)

q=list;while (q->link != NULL )

q=1700

q->link=NULL1700

{ p=q;q=q->link; }

20002500

NULL

while (q->link != NULL ){ p=q;q=q->link; }q->link=NULLp->link=NULL; free(q); }

1700 1702

20/2/2002 S.Padmavathi, Amrita University. 40

LINKED LIST –DELETION (After node whose data is x)

if (list= = NULL) // empty list

{ q=list;while (q->link != NULL || q->data != x)

q=q->link; if(q->link = = NULL) //no node next to q

printf(“deletion not possible”);else { p=q->link ; //p- node to be deleted

q->link = p->link ; //q- node with data x

printf(“empty list, node not found”);else // search for node x

free(p) ; } }

20/2/2002 S.Padmavathi, Amrita University. 41

30 NULL

1700 1702

2000

LIST

1000

10 2500

2000 2002

p

1050

q=2000q->link=2500

170020

2500 2502

q

1500

2000

LINKED LIST –DELETION (After node x=10)

q=list;while (q->link != NULL || q->data != x)q->data=10

q->data=10

if(q->link = = NULL)else { p = q->link ;q->link=p ->link;

X=10

free(p) ; }}

2500

1700

2500 2502

20/2/2002 S.Padmavathi, Amrita University. 42

30 NULL

1700 1702

2000

LIST

1000

10 2500

2000 2002

p

1050

q=2000q->link=2500

170020

2500 2502

q

1500

20002500q=2500q->link=1700

LINKED LIST –DELETION (After node x=20)

q=list;while (q->link != NULL || q->data != x)q=q->link; q->data=20

q->data=10q->data=20

if(q->link = = NULL)else { p = q->link ;q->link=p ->link;

X=20

free(p) ; }}

1700

1700 1702

NULL

20/2/2002 S.Padmavathi, Amrita University. 43

30 NULL

1700 1702

2000

LIST

1000

10 2500

2000 2002

p

1050

q=2000q->link=2500

170020

2500 2502

q

1500

20002500q=2500q->link=1700

LINKED LIST –DELETION (After node x)

q=list;while (q->link != NULL || q->data != x)q=q->link;

q->data=10q->data=20

while (q->link != NULL || q->data != x)

q=1700q->link=NULLq->data=30

q=q->link;

1700

q->link=NULLif(q->link = = NULL) printf(“deletion not possible”);

X=8 or 30

20/2/2002 S.Padmavathi, Amrita University. 44

�%�������

�%������