0% found this document useful (0 votes)
305 views19 pages

មេរៀនទី 11-Dynamic Data Structures

The document discusses dynamic memory allocation and linked lists. It explains what pointers are and how dynamic variables are created using functions like malloc, calloc and realloc. It also describes how linked lists are implemented using dynamic memory allocation and how data is added to and traversed in a linked list.

Uploaded by

Sopheap Sang
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
305 views19 pages

មេរៀនទី 11-Dynamic Data Structures

The document discusses dynamic memory allocation and linked lists. It explains what pointers are and how dynamic variables are created using functions like malloc, calloc and realloc. It also describes how linked lists are implemented using dynamic memory allocation and how data is added to and traversed in a linked list.

Uploaded by

Sopheap Sang
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 19

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

You might also like