Download as pdf or txt
Download as pdf or txt
You are on page 1of 22

Data

structure and
algorithms

Structures and Pointers


Representation of
Array in memory
Representation one array in memory

• One Dimensional array


 Location (X[I]) = Base Address + (I-1)

Eg: find X [4] , base address =500

Location (X[I]) = Base Address + (I-1)


Location (X[4]) = 500+ (4-1)
= 503
Representation Two array in memory

• Row – wise method


 Location (A[I,J])=Base Address +N*(I-1)+(J-1)

Eg : A[5,7] ,M=5,N=7, Base Address =900 Find A[4,6]

Location (A[I,J])=Base Address +N*(I-1)+(J-1)


loc (A[4,6])= 900 + 7*(4-1)+(6-1)
= 900 + 21+5
= 926
Representation Two array in memory

• Column – wise method


 Location (A[I,J])=Base Address +M*(J-1)+(I-1)

Eg : A[5,7] ,M=5,N=7, Base Address =900 Find A[4,6]

Location (A[I,J])=Base Address +M*(J-1)+(I-1)


loc (A[4,6])= 900 + 5*(6-1)+(4-1)
= 900 + 25+3
= 928
Structures And Pointers
‫التراكيب ‪Structures‬‬

‫يتم االعالن عنها بالشكل التالي‬


‫‪Struct struct_name‬‬
‫{‬ ‫التركيبة )‪ (structure‬تعني امكانية‬ ‫●‬

‫;‪type member1‬‬ ‫تجميع مجموعه من المتغيرات من نفس‬


‫;‪type member2‬‬
‫‪…….‬‬ ‫النوع او انواع مختلفة كل واحدة منها لها‬
‫‪…….‬‬ ‫خانة او حقل )‪ (field‬تحت اسم واحد‬
‫;‪type membern‬‬
‫;‪} struct_variabile‬‬ ‫بحيث يمكن الرجوع الى هذه المتغيرات‬
‫عن طريق اسم التركيبة و بالتالي يمكن‬
‫حيث ‪:‬‬ ‫مراجعتها كوحدة واحدة‬
‫‪ Struct_name‬اسم التركيبة‬
‫‪ Member‬اسم العنصر‬
‫‪ Struct_variable‬اسم المتغير من نوع التركيبة‬
Structures ‫التراكيب‬
Books ‫فيما يلي وصف تركيبة تحتوى على عناصر تحت اسم‬ ●

struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
float price;
} book;
‫التراكيب ‪Structures‬‬

‫التعامل مع التركيبة عن طريقة اسم التركيبة باستخدام الصيغة االتية ‪:‬‬

‫‪Struct_variable.member‬‬
#include <iostream>
#include <cstring>
Structures ‫التراكيب‬
using namespace std;

struct Books {
char title[50];
char author[50];
char subject[100];
int book_id;
};

int main() {
struct Books Book1; // Declare Book1 of type Book
struct Books Book2; // Declare Book2 of type Book

// book 1 specification
strcpy( Book1.title, "Learn C++ Programming");
strcpy( Book1.author, "Chand Miyan");
strcpy( Book1.subject, "C++ Programming");
Book1.book_id = 6495407;

// book 2 specification
strcpy( Book2.title, "Telecom Billing");
strcpy( Book2.author, "Yakit Singha");
strcpy( Book2.subject, "Telecom");
Book2.book_id = 6495700;

// Print Book1 info


cout << "Book 1 title : " << Book1.title <<endl;
cout << "Book 1 author : " << Book1.author <<endl;
cout << "Book 1 subject : " << Book1.subject <<endl;
cout << "Book 1 id : " << Book1.book_id <<endl;

// Print Book2 info


cout << "Book 2 title : " << Book2.title <<endl;
cout << "Book 2 author : " << Book2.author <<endl;
cout << "Book 2 subject : " << Book2.subject <<endl;
cout << "Book 2 id : " << Book2.book_id <<endl;

return 0;
}
‫المؤشرات‬
Pointers
‫المؤشرات ‪Pointers‬‬
‫المؤشرات هي نوع بيانات ‪ -‬وكما يشير إسمها هي أنها تؤشر أو تشير إلى شيء ما ‪ ،‬وذلك‬ ‫●‬
‫الشيء هو موقع في الذاكرة يحوي قيمة ما‪ ،‬تكمن أهميتها في أنها تتعامل مع الذاكرة مباشرة‬
‫و تعطيك سرعة في برنامجك‬

‫تُقسم ذاكرة الحاسوب إلى أجزاء من ‪ bytes‬وكل بايت لديه العنوان الخاص به على سبيل‬ ‫●‬

‫المثال في ذاكرة حجمها ‪ KB 1‬يوجد ‪ bytes 1024‬وكل بايت يعطي عنوان‬


‫(أي أن مجال العناوين من ‪.)1023 - 0‬‬

‫فالمؤشرات إ ًذا هي متغيرات تختزن عناوين متغيرات أخرى في الذاكرة بالـ ‪hexadecimal‬‬
‫النظام السادس عشري‬
‫المؤشرات‬

‫;‪int *p‬‬ ‫يُعرّ ف المؤشر بطريقتين‪:‬‬ ‫●‬


‫أو‬
‫;‪int* p‬‬

‫مثال على طريقة تعريف مؤشر وإسناد عنوان متغير من نوع ‪ int‬إليه‪:‬‬

‫;‪int* ptr‬‬
‫;‪int a = 5‬‬
‫‪ptr = &a; // &a is the address of a‬‬
‫مثال‬ ●
‫ و حاول أن تستنتج شكل المخرجات‬، ‫تتبع البرنامج التالي‬
#include
int main ()
{ int value1 = 5, value2 = 15;
int* p1; int* p2;
p1 = &value1;
p2 = &value2;
*p1 = 10;
*p2 = *p1;
p1 = p2;
*p1 = 20;
cout << "value1==" <<value1<<"\t value2=="<< value2<

Value1==10 value2==20 : ‫خرج البرنامج هو‬


‫العمليات الحسابية على المؤشرات‬

‫يمكن تنفيذ ثالث عمليات حسابية أساسية على المؤشر وهي‪:‬‬


‫‪. 1‬زيادة رقم صحيح إلى المؤشر‪.‬‬
‫‪. 2‬طرح رقم صحيح من المؤشر‪.‬‬
‫‪. 3‬طرح مؤشر من مؤشر‪.‬‬

‫تستطيع المؤشرات اإلشارة إلى المتغيرات المفردة كما وتشير إلى عناصر المصفوفة ‪array‬‬
‫لنفترض أن ‪ p,a‬عرفت كما يلي‪ int a[10],*p; :‬فبهذا يمكن استخدام المؤشر ‪ p‬لإلشارة إلى العنصر‬
‫األول من المصفوفة ]‪ a[0‬كما يلي‪:‬‬

‫;]‪ p=&a[0‬للعبارة مكافئة وهي ;‪p=a‬‬


‫ باستخدام المؤشرات احسب وأطبع مجموع عناصر مصفوفة حجمها عشرة عناصر تستخدم لتخزين بيانات‬-: ‫مثال‬
#include <iostream> ‫من النوع الصحيح‬
using namespace std;
int main()
{
int a[10],sum,*p,i;
sum=0;
for(i=0;i<10;i++)
{ cout<<"enter a["<<i+1<<"]:"; cin>>a[i]; }
for(p=&a[0];p<&a[10];p++)
sum+=*p;
cout<<"sum="<<sum<<endl;
return 0;
}
:‫مثال يوضح استخدام المؤشرات مع المصفوفات‬
int main()
{
int a[5]={5,10,15,20,25};
int *p;
p=a; //p=&a[0];
cout<<"the first method to print array elements \n";
for(int i=0;i<5;i++)
cout<<*(p+i)<<"\t";
cout<<"\n";
cout<<"the second method to print array elements\n";
for(p=a;p<&a[5];p++)
cout<<*p<<"\t";
cout<<"\n";
return 0;
}
‫مؤشرات المؤشرات ‪pointers to pointers‬‬

‫ويتم اإلعالن عن مؤشر المؤشر بالشكل التالي ‪int **p; :‬‬


‫وهو مؤشر لمؤشر من نوع عددي صحيح ‪.‬‬
‫)(‪int main‬‬ ‫مثال ‪:‬‬
‫{‬
‫;‪int v,*a,**b‬‬
‫;‪v=20‬‬
‫;‪a=&v‬‬
‫;‪b=&a‬‬
‫;‪cout<<"**b="<<**b<<endl‬‬
‫;‪return 0‬‬
‫}‬
‫الحجز وإلغاء الحجز للذاكرة‬

‫لغة ‪ C ++‬تسمح بإستخدام المؤشر ‪ new‬لحجز الذاكرة الديناميكية والمؤشر ‪ delete‬لتنظيف الذاكرة يمكن استخدام‬
‫المؤشر ‪ new‬لحجز ذاكرة موقع واحد حسب الصيغة التالية‪:‬‬

‫;)‪data type *p-var = new data type (value‬‬


‫مثال‪ :‬احجز ذاكرة لموقع واحد من نوع ‪int‬وضع فيه القيمة ‪8‬‬

‫;)‪int *x =new int(8‬‬


‫كما يمكن حجز ذاكرة لعدة مواقع( ‪n‬موقع) كما في حالة المصفوفات وذلك حسب الصيغة التالية‪:‬‬

‫;]‪data type *p-var = new data type [n‬‬


‫مثال‪ :‬احجز ذاكرة لعشرة مواقع لبيانات من النوع الحقيقي‪:‬‬

‫;]‪float *y =new float[10‬‬


‫كما ويستخدم المؤشر ‪delete‬لحذف موقع واحد حسب الصيغة التالية‪:‬‬

‫‪Delete p-var‬‬
‫مثال ‪:‬‬
‫;)‪int *x =new int(8‬‬
‫;‪delete x‬‬

‫ما في حالة حذف عدة مواقع فتستخدم الصيغة التالية ‪:‬‬

‫;]‪float *y =new float[10‬‬


‫;‪delete [ ] y‬‬
:‫ من العناصر في مصفوفة ثم طباعتها‬m ‫ اكتب برنامج إلدخال‬-:‫مثال‬
int main()
{
int m,i;
cout<<" enter m\n";
cin>>m;
int *x = new int [m];
for(i=0;i<m;i++)

cin>>*(x+i);
cout<<" array elements is \n";
for(i=0;i<m;i++)
cout<<*(x+i)<<"\n";
delete [ ] x;
return 0;
}

You might also like