emeronTI11
Dynamic
Data Structures
I. Say about pointer again :
pointer
Address p.
Ca variable pk Address minEmnpktMleT dUecH *p CaTinnyEdlpkkg
bniyay ma:geTot p Ca pointer point to variable Edlpk value *p .
II. Dynamic variable:
bNa variable manRbePTTinny/ EdleyIgFab;sikSakngmkdUcCa Array, int, float ...
ehAfa static variable eRBaHvaRtUv)ankMNt;niymnyCaRsac;muneBl Declaration variable .
ryeBlkekIt static variable KWCaryeBln karkekItnUvkMNat;kmviFIEdlpkvaEdr .
EtbNa Variable kGacRtUv)ankekItedayrebob dynamic . mannyfa kekIteLIgenAeBleyIg
Run kmviFI .
dUecH Variable enHminRtUv)ankMNt;niymnyCamuneT . Variable RbePTenHehAfa Dynamic
variable .
Dynamic variable KaneQaHeT eRBaHkardak;eQaHkarBit KWkartageGayvanUv Address
kMNt;mYy . karbegIt Dynamic variable niglubvaeTAvij RtUvGnuvtn_edayEpkbNa function
dUcCa malloc ( ) nig free ( ) EdlmanRsab;kg Library <stdlib.h> . kar Access CamYy
223
RtUvGnuvtn_edayEpkbNa Variable RbePT pointer (Pointer Variable ) .
bNa pointer Variable RtUvkMNt;Tinny dUcCa Static Variable Edr . mannyyfa maneQaH
nigRtUv Declaration PamenAEpkxagedImkgEpk Declaration Variable nigRtUv)aneRbIedIm,Ipk
Address rbs;bNa Dynamic Variable ) .
Ex1: Declaration pointer nigbegIt Dynamic Variable:
Dynamic variable
int *pNumber;
pNumber = (int*) malloc (100) ;
/*Declaration pointer variable*/
/*Create Dynamic Variable*/
kMNat;kmviFIxagelIpl;eGayeyIg 100 bytes kg memory nigtag Address of memory
enHeTAeGay pNumber . 100 bytes enHeRbIsMrab;pk %0 cMnYnKt; . ebIcg;)an memory
eGayRtwmRtUvsMrab; &% cMnYnKt;/ eyIgsresrdUcxageRkam
int *pNumber;
pNumber = (int*) malloc (75*sizeof (int));
dUcKacMeBaHbNakar Declaration epSg/ eyIgsresr
char *cPtr;
cPtr = (char *) malloc (l50*sizeof (char));
float *fPtr;
fPtr = (float*) malloc (55*sizeof (float));
eyIgnigsikSa]TahrN_sIGMBiI malloc function dUcxageRkam
Ex2: eRbI Function malloc (memory allocaion)
# include <stdio.h>
# include <conio.h>
# include <string.h>
# include <alloc.h>
# include <process.h>
int main (void)
{ char *str ;
/*allocate memry for string*/
if ((str = ( char *) malloc (10) = = NULL)
{ printf (\n there isnt enough memory)
exit (1);
}
/* copy Hello into string */
strcpy (str, Hello);
/* free memory */
224
free (str);
return 0;
}
kg]TahrN_xagelI/ eyIg)an
Note:
Declaration pointer string str
if ((str = (char*) malloc (10) = = NULL)
{ printf (\n there isnt enough memory);
exit (1);
}
. bnab;mkkMNat;kmvFi I
nigerobcM
dynamic
memory
sMrab;
10
chapters
nigkgdMNak;kalenHmankarRtYtBinitemIl computer man memory RKb;RKan;bGt; ?
edayrebobRtYtBinitemIl lTpl pointer str mantMlCa NULL bGt; ?
eyIgGaceRbI function farmalloc edIm,Ipl;nUv memory FMCag malloc .
Function exit (1) ykecjBI file < process.h>
Statement (char *) malloc (10)
eyIgyl;fa erobcMpl;
tMbUgrbs; memory .
RbePT char nig lTplrbs;vaCa Address
enHGnuvtn_cMeBaHRbePtTinny int, float, long, char,
dynamic memory
Function
double ....
Syntax:
(datatype *) malloc(sizeof(memory))
lTplrbs; statement enHCanicCakal Ca address mYy nigCa Address dMbUgrbs; memory
EdlRtUvpl;/ kgenaH data type CaTinny .
Syntax:
(datatype*)
225
CaRbePT
pointer
(datatype
*)
. ]TahrN_
convert
(float) n
mannyfa
CaRbePT
pointer
convert n
point
eGayeTACacMnYnBit .
to
datatype
.
dUecHeyIgGacsresrdUcxageRkam
pointer malloc(sizeof(memory))
kgkarN_cg;begIt Dynamic memory eGayRbePTTinny minEmnCa int, float,
double, eBalKwRbePT TInnyEdleyIgCaGkbegIt/ eyIgRtUveRbI function calloc ( ) .
long,
Syntax:
(datatype*) calloc (n, sizeof (object));
Ex:
struct persont {
char name[80];
int age;
char Address[25];
};
struct person *ptr; /* Declaration pointer person */
sMrab;eGay 10 nak; dUcxageRkam
calloc (10, sizeof (struct person));
eRbI
eGay
Ex3:
Function calloc
string :
# include <stdio.h>
# include <alloc.h>
# include <string.h>
int main (void)
{ char *str = NULL ;
/* allocate memory for string */
str = (char *) calloc (10, sizeof (char));
/* copy Hello into string */
strcpy (str, Hello);
/* display string */
printf (\n String is %s \nstr);
226
ehIyeyIgbegIt
memory
/* free memory */
free (str);
return 0;
}
Function realloc ( )
Ca function begIteLIgvijnUv memory :
(datatype *) realloc (buf_ptr, newsize);
kgenaH buf_ptr Ca pointer kMBug point to memory EdlRtUv)anbegIt pl;eGayBIelIkmun
. newsize CaTMhMfI EdlRtUvbegIt nigpl; GacFMCag btUcCagmun .
Ex4:
# include <stdio.h>
# include <conio.h>
# include <string.h>
int main (void)
{
char *str ;
/* allocate memory for string */
str = (char *) malloc (10);
strcpy (str, Hello);
printf ( \n string %s \n Address %p \n, str, str);
str = (char*) realloc (str,20);
printf (\n string %s \n New Address %p \nstr, str);
free (str);
return 0;
227
III. Heap memory nigrebobbegIt Dynamic variable :
bNa dynamic variable EdlbegIteLIgeday malloc RtUv)an C erobeTAkg Block free
memory ehAfa HEAP . Pasa C RKb;RKg Heap tamry pointer of Heap KW HeapPtr .
pointer of Heap CanicCakal point to bype free dMbUgrbs; Block free memory rbs;
Heap . ral;eBl call malloc ( ), pointer of Heap RtUv)anpas;TItaMgEpkxagelIn block
free memory bNa byte mYycMnYnsmmUl nwgTMhMrbs; dynamic variable EdleTIbbegIt)an
. cMeBaHGksresrkmviFI/ Heap KWCamUkdanRKwHEdlRtUvkab;eGay)an .
Ex5:
rkcMnYn prime
# include <stdio.h>
# include <conio.h>
main ( )
{long *primes = NULL, *start = NULL, *open = NULL, trial = 0;
228
int i = 0, found = 0; total = 0;
printf (\n How many primes :); scanf (%d, &total);
primes = (long*) malloc (total*sizeof (long));
if (primes = = NULL)
{printf (\n there isnt enough memory !!);
return 0;
}
/* 3 primes
tMbUgEdleyIgdwg */
*primes = 2;
*(primes+1) = 3;
*(primes+2) = 5;
open = primes + 3; /*
yk Address free bnrbnab;eTot */
trial = 5;
do {
yktM;bnbnab;eTotedIm,IRtYtBinit */
start = primes; /* start point to EpkdMbUgrbs;prime */
trial + =2; /*
found = 0;
for (i = 0; i < open-primes; i++)
if (found = (trial % *start ++) = = 0) break;
if (found = = 0) /*
rkeXIjcMnYnfI */
*open ++ = trial;
}
while (open primes < = total);
for (i = 0; i <5 *(total /5); i+ = 5) /*display 5
elxmg */
printf (\n%12ld %12ld %12ld %12ld %12ld, *(primes + i),
* (primes +i + 1), *(primes + i +2), *(primes +i +3),
*(primes +i + 4));
printf (\n);
229
for (i = total (total%5); i < total; i++ )
printf (%12d, (primes +i )); /*display
EpkenAsl; */
}
The Result is
How
2
13
31
53
73
many
3
17
37
59
79
primes:
5
19
41
61
83
25
7
23
43
67
83
11
29
47
71
97
IV. Linked List :
eBleyIgcg;begIt List mYy/ ]TahrN_ List of Employee, ehIyeyIgdwgcMnYn
mnusSBitR)akd enaHeyIgGaceRbI Array of struct edIm,IbegIt eRBaHvamanlkNgayRsYl .
EtebIeyIgminsal;cMnYnmnusSCamunenaH eyIgKb,IeRbI Dynamic Variable, eRBaHvamanlkN
kgkarsnSMsMc memory eBlNaeyIgRtUvkareTIbeyIgbegItvamkeRbI . Memory eRbIsMrab;
static Variable TaMgGs;kg computer IBM_PC KWmanEt 64KB eBalKWmYy Segment .
a/ Create a Linked List:
cUrsresrkmviFIbegIt Linked List n
employee
Ex:
# include <stdio.h>
# include <conio.h>
# include <alloc.h>
struct employee { char name[30];
int age;
struct employee *next;
};
main ( )
230
mYy
struct employee *last;
struct employee *ptr;
char name[30];
last = NULL;
/* Read form Keyboard to List */
do { printf (\n name :); gets (name);
if (name[0] != \0)
{ ptr = calloc (1, sizeof (struct employee ));
/*Read Value of employee */
strcpy (ptrname, name); /*ptrname = name */
printf (\n Age :); scanf (%d, &ptrage);
while (getchar ( ) != \n);
ptrnext = last;
last = ptr;
}
} while (name[0] != \0);
/* control and read again to list */
printf (\n\n List of Employee :);
ptr = last;
while (ptr != NULL )
{ printf (Name : %s \n, ptrname);
printf (Age : %d \n\n, ptrage);
ptr = ptrnext; /* ptr point to next record */
}
getch ( );
return 0;
}
]bmaeyIg Read bBaltamlMdab; Mr one, 1 age, Mr two, 2 age...
last KwCa pointer Variable, CanicCakal point to last of list . eBlcab;epIm Run
program KWeyIgtag
last = NULL mannyfa List Empty .
Explain:
231
Ca
name
employee
variable
RbePT
string
eRbIsMrab;
Read from keyboard
nUveQaHrbs;
ebI name minEmnCa string TeT/ eyIg test edayrebob name[0] != \0;
edIm,IdwgfamaneQaHfIRtUvEfmeTA kg List bGt; ? Procedure calloc (--- ); nwgbegIt
Dynamic Variable .
dynamic Variable man field mYyeQaH Next
Ca pointer variable)
ehIyeyIgcg;eGay
field next nFatuEdleTIbbegIt CanicCakal point to
FatuEdlbegIteLIgmunvabnic .
ptrnext = last;
ral;eBleyIgeRbI calloc ( ) enaH ptr min point eTA Dynamic Variable
EdlbegItmunenaHeT/ EteyIg kmin)at; Address rbs;BYkvaEdr edayEpkelI Linked List
CakareRsc .
Statement
last = ptr;
nwgeFVIeGay last point to last record in linked list ehIyEdlCanicCakal ptr k point to
last record Edr .
KMnUsbMRBYj
+
cab;epIm
Last
+ Loop
Kan point eTANATaMgGs;
NULL
TI 1
Last
Mr One
232
ptr
Next
+ Loop
TI2
NULL
ptr = calloc (1, sizeof (struct employye));
strcpy (ptrname, name);
printf (Age :), scanf (%d, &ptrage);
while (getchar ( ) != \n);
ptr
point to
Mr two
2
next
Mr One
Last
ptr next = last;
last = ptr;
ptr
Mr two
next
last
Mr One
dUcxagelIehAfa LIFO
cUlmunecjeRkay/ cUleRkayecjmun .
Linked List
Name : MrOne
Age : 1
Name: Mr two
Age : 2
List of Employee:
Name : Mr Two
233
(Last In, First Out)
ehAfa
Stack
Age : 2
Name : Mr One
Age : 1
eBlenHeyIgcg;EfmFatufITI3 (Mr Three, Age 3) eTAkNalFatuBImun
]bmafaeyIgeRbI last CA pointer point to last of list dUcxagelI
b/ Insert :
struct employee *Q;
Q = calloc (1, sizeof (struct employee));
strcpy (Qname, Three);
QAge = 3;
/* find position to insert */
ptr = last;
while ((ptr != NULL) && (strcmp (ptrname, Mr Two)))
ptr = ptrnext;
Qnext = ptrnext;
ptrnext = Q;
c/ Function Create List :
234
kg EpkxagelI/ eyIg)anbegIt Linked
vaEfmeTotedayeRbI Function create List :
List
dUckg]TahrN_/ eyIgcg;
update
Void create_list (struct people ** first);
kgenaHeyIgeRbI first CA pointer point to pointer point to FatumYyrbs; list .
mannyfaeyIgEfmFatufI (New record) mYyeTAkg list rbs;eyIgRtg;TItaMgEdl pointer
first munenHkMBug point to enaH .
Ex7: Function create list :
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
# include <alloc.h>
struct person {char name[30];
int age;
struct person *next;
};
void create_list (struct person **first);
main ( )
{struct person *last;
create_list (&last);
printf (\n\n List of Employee : \n);
ptr = last;
while (ptr!= NULL)
{printf (Name :%s \n, ptrname);
printf (age :%d \n\n, ptrage);
ptr = ptrnext; /* ptr point to next record */
}
getch ( );
235
return 0;
}
void create_list (struct person **alast)
{
struct person *ptr;
char name[30];
*alast = NULL;
do {printf (\n Name :); gets(name);
if (name[0]; != \0)
{ ptr = colloc (1, sizeof(struct person));
strcpy (ptrname, name);
printf (Age :);
scanf (%d, &ptrage);
while (getchar ( ) != \n);
ptr next = *alast;
*alast = ptr;
}
}
while (name[0] != \0);
d/ Delete :
pyBI insert, eBalKWlubmYy Record ecjBI List, . ]TahrN_cg;lub record
EdlmaneQaH Tree ecjBI list eBlenaHeyIgRtUveRbI Q kgeBlrk Record EdlmaneQaH
Three . eBlrkeXIjehIyeyIglubvaecj edayrebob BIry:agxusKa .
Struct person *Q, *P;
/* Search record for delete */
P = last; name = three;
while ((P != NULL ) && (strcmp (Pname, name )))
{
Q = P;
236
P = Pnext ;
}
/* delete */
if ( P == last ) last = Pnext;
else Qnext = Pnext;
e/ Parameter is a pointer dynamic :
GaceRbICa Parameter rbs; subprogram )an/ ]TahrN_ eyIgsresr
dUcxageRkam
dynamic Variable
Function Insert
void insert (person * Q);
{ ...
};
eyIgGacsresr Function mYyEdlmanlTplCa pointer .
* person TT (peron *last);
{ struct person *p1, *p2;
p1 = last;
last = NULL;
do { p2 = p1next;
p1next = last;
last = p1;
p1 = p2;
} while (p1 == NULL );
return last;
};
muneBlehA Q = TT (last);
last
point
Three
Two
One
1
NULL
237
eRkayBIehA Q = TT (last);
Q
last
point
Three
Two
One
NULL
f/
RbePTTinny FIFO :
FIFO (First In First Out)
CaRbePT Memory EdlTinnyNacUlmun ecjmun cUleRkay
ecjeRkay.
Ex8:
# include <stdio.h>
# include <conio.h>
# include <alloc.h>
# include <stdlib.h>
struct person {char name[30];
int age;
struct person *next;
} people;
main ( )
{
struct person *last, *first, *ptr;
char name[30];
first = NULL;
do {prinf (\n Name :); gets (name);
if (strcmp (name, ))
/* create new record */
238
{ptr = colloc (1, sizeof (struct person));
strcpy (ptr name, name );
printf (Age : ); scanf (%d, &ptr age);
ptr next = NULL;
if (first != NULL) last next = ptr;
else first = ptr;
last = ptr;
while (getchar ( ) != \n);
};
} while (name[0] != \0);
/* Record FIFO again */
ptr = first;
while (ptr != NULL)
{printf (%s\n, ptr name);
printf (%d\n, ptr age);
ptr = ptr next;
};
}
=====*=====
239
sMnYr
1.
]bmaman x nig y manRbePTCa pointer dUcKa . sYrfa RbmaNviFIxageRkam
x=y;
nig *x = *y ;
etIsmmUlnwgKabGt ; ? cUrBnl ; ?
2. GFib,ayskmPaBrbs ; FIFO edayKUskMnUsbMRBYjCamYy
insert .
3.
cUr print Address rbs; Variable NamYymkelI screen .
4.
sresrkmviFIGFib,ayBIkarbegIt Linked list
5. cUrBinitkmviFIxageRkammankMhusGVIxH ? cUrEkkMhus ?
Algorithm delete
nig
struct Myrecord { int Num;
Myrecord *next;
};
struct Myrecord *Head, * Tail, *T;
]bmaeyIg)anbegIt linked list 20 node, Edl Head nig Tail point to node
dMbUgnig node cugeRkay . eyIgRtUvlub node TaMgGs;kgeBlEtmYy */
{
/*
T = Head;
while (T != NULL)
{Dsiplose (Head);
Head = Head Next;
T = Head;
};
240
Head = NULL;
Tail = NULL;
T = NULL;
}
=====*=====
241