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