‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvsd9402
‫مدرس‬:
‫شیرافکن‬ ‫فرشید‬
‫دکتری‬ ‫دانشجوی‬‫تهران‬ ‫دانشگاه‬
(‫ارشد‬‫کارشناسی‬ ‫و‬‫کارشناسی‬:‫افزار‬ ‫نرم‬ ‫کامپیوتر‬( )‫دکتری‬:‫انفورماتیک‬ ‫بیو‬)
‫آرایه‬
1
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫آرایه‬ ‫تعریف‬
2
‫آرايه‬‫‌اي‬‫ه‬‫مجموع‬‫از‬‫‌هاي‬‫ه‬‫داد‬‫هم‬‫نوع‬‫است‬‫که‬‫تحت‬‫يک‬‫نام‬‫معرفي‬‫شده‬‫و‬‫براي‬‫دسترسي‬‫به‬‫هر‬‫عنصر‬‫آن‬‫از‬‫انديس‬
‫مشخصي‬‫استفاده‬‫‌شود‬‫ي‬‫م‬.
int a[10];
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫بعدی‬ ‫دو‬ ‫آرایه‬
3
int balances[11][6];
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫آرایه‬3‫بعدی‬
4
int c [3][4][5];
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫نحوه‌ذخیره‌عناصر‌آرايه‌در‌حافظه‬
‫عناصر‬‫آرايه‬‫در‬‫حافظه‬‫به‬‫صورت‬‫پشت‬‫سر‬‫هم‬‫قرار‬‫مي‬‫گیرند‬‫که‬‫موجب‬‫سريع‬‫شدن‬‫سرعت‬‫دسترسي‬‫به‬‫عناص‬‫ر‬‫آرايه‬
‫مي‬‫شود‬.‫با‬‫فرض‬‫اينکه‬‫عنصر‬‫اول‬‫آرايه‬‫در‬‫آدرس‬‫آلفا‬‫حافظه‬‫ذخیره‬‫شود‬‫و‬‫هر‬‫عنصر‬‫آرايه‬‫به‬‫اندازه‬w‫بايت‬‫فضا‬
‫اشغال‬،‫نمايد‬‫محل‬‫هر‬‫عنصر‬‫آرايه‬‫در‬‫حافظه‬‫به‬‫کمک‬‫روابط‬‫زير‬‫محاسبه‬‫مي‬‫شود‬.‫فرض‬‫شده‬‫که‬‫عناصر‬‫آرايه‬‫ب‬‫ه‬
‫صورت‬‫سطر‬‫به‬‫سطر‬‫در‬‫حافظه‬‫ذخیره‬‫شده‬‫است‬:
5
wljlulijixloc  )]()1()[(:]),[( 2221
wlkluljlululi
kjixloc
 )]()1()()1()1()[(
:]),,[(
333233221
wliixloc  )(:])[( 
]..,..[ 2211 ululx
]..,..,..[ 332211 ulululx
]..[ ulx
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫مثال‬
‫آدرس‬‫عنصر‬A[1][2]‫در‬‫آرايه‬A[3][4]‫را‬‫محاسبه‬‫کنید‬.
‫فرض‬:
‫عناصر‬‫آرايه‬‫از‬‫نوع‬‫داده‬8‫بايتي‬‫است‬.
‫آدرس‬‫شروع‬‫آرايه‬10‫است‬.
‫حل‬:
‫محدوده‬‫انديس‬‫ها‬‫به‬‫صورت‬A[0..2][0..3]‫باشد‬.
6
588)]02(4)01[(10 
wljluli  )]()1()[( 2221
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫مثال‬
A[3][4]
7
588)]02(4)01[(10 
3210
0
1
2
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫مثال‬
‫آدرس‬‫عنصر‬A[3][4][2]‫در‬‫آرايه‬A[20][10][5]‫را‬‫محاسبه‬‫کنید‬.
‫فرض‬:
‫عناصر‬‫آرايه‬‫از‬‫نوع‬‫داده‬2‫بايتي‬‫است‬.
‫آدرس‬‫شروع‬‫آرايه‬‫صفر‬‫است‬.
‫حل‬:
‫محدوده‬‫انديس‬‫ها‬‫به‬‫صورت‬A[0..19][0..9][0..4]‫باشد‬.
8
3442]220150[0
2)]02(5)04(510)03[(0


wlkluljlululi  )]()1()()1()1()[( 333233221
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫در‬ ‫خطی‬ ‫جستجوی‬‫آرایه‬
‫تابع‬‫زير‬‫مقدار‬x‫را‬‫در‬‫آرايه‬n‫عنصري‬a،‫به‬‫روش‬‫مقايسه‬‫با‬‫تک‬‫تک‬‫عناصر‬،‫آرايه‬‫جستجو‬‫‌نمايد‬‫ي‬‫م‬.‫در‬‫صورت‬‫پیدا‬‫کردن‬،
‫انديس‬‫خانه‬‫حاوي‬x‫و‬‫در‬‫صورت‬‫پیدا‬،‫نکردن‬‫عدد‬-1‫را‬‫بر‬‫مي‬‫گرداند‬.
seqsearch (a[ ] , n , x )
{
for ( i = 0 ; i <=n-1 ; i++ )
if (a[i] == x)
return i ;
return -1 ;
}
‌‫در‌يک‌جستجوي‌ناموفق‌نیاز‌به‬n+1‌‌‫عمل‌مقايسه‌داريم‌که‌در‌نتیجه‌زمان‌آن‬O(n)‌‫خواهد‬‫بود‬‌‌.
9
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402‫دودویی‬ ‫جستجوی‬
‫با‬‫فرض‬‫اينکه‬‫آرايه‬‫به‬‫طور‬‫صعودي‬‫مرتب‬‫شده‬،‫باشد‬‫عنصر‬‫مورد‬‫جستجو‬‫با‬‫عنصر‬‫وسط‬‫آرايه‬‫مقايسه‬‫مي‬،‫شود‬
‫در‬‫صورت‬‫برابر‬،‫بودن‬‫پیدا‬‫شده‬‫است‬.
‫در‬‫غیر‬،‫اينصورت‬‫اگر‬‫از‬‫عنصر‬‫وسط‬‫آرايه‬‫بزرگتر‬،‫باشد‬‫مقايسه‬‫به‬‫طور‬‫بازگشتي‬‫در‬‫نیمه‬‫بااليي‬‫آرايه‬‫انجام‬‫مي‬‫گیرد‬
‫و‬‫در‬‫صورت‬‫کوچکتر‬‫بودن‬‫از‬‫عنصر‬،‫وسط‬‫مقايسه‬‫به‬‫طور‬‫بازگشتي‬‫در‬‫نیمه‬‫پايیني‬‫آرايه‬‫انجام‬‫مي‬‫شود‬.
10
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫مثال‬
‫مثال‬:‫پیدا‬‫کردن‬‫عدد‬12‫در‬‫آرايه‬‫مرتب‬:
1-‫مقايسه‬12‫با‬‫عنصر‬‫وسط‬x[1..9]‫يعني‬35.
2-‫مقايسه‬12‫با‬‫عنصر‬‫وسط‬x[1..4]‫يعني‬9.
3-‫مقايسه‬12‫با‬‫عنصر‬‫وسط‬x[3..4]‫يعني‬12.
‫بنابراين‬‫با‬3‫مقايسه‬‫عدد‬12‫را‬‫پیدا‬‫کرديم‬.
11
1 2 3 4 5 6 7 8 9
5 9 12 20 35 50 82 88 97
5 9 12 20 35 50 82 88 97
5 9 12 20 35 50 82 88 97
5 9 12 20 35 50 82 88 97
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫دودویی‬ ‫جستجوی‬ ‫تابع‬
‫تابع‬‫زير‬‫مقدار‬x‫را‬‫در‬‫آرايه‬n‫عنصري‬‫مرتب‬A،‫به‬‫روش‬،‫دودويي‬‫جستجو‬‫‌نمايد‬‫ي‬‫م‬.‫اگر‬x‫را‬‫پیدا‬،‫کند‬‫انديس‬‫آن‬‫را‬‫در‬‫آرايه‬
‫بر‬‫مي‬‫گرداند‬‫و‬‫در‬‫صورت‬‫پیدا‬،‫نکردن‬‫عدد‬-1‫را‬‫بر‬‫مي‬‫گرداند‬.(‫در‬‫ابتدا‬:(low=0 , high=n-1
bsearch(a[ ] , x , low , high){
while (low <= high)
{
mid = (low + high) / 2 ;
if ( x < a[mid] )
high = mid-1 ;
else
if ( x > a[mid] )
low = mid+1 ;
else return mid ;
}
return -1 ;
}
12
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫دودویی‬ ‫جستجوی‬(‫بازگشتی‬)
bsearch (a[ ] , x , low , high ){
if (low <=high )
{
mid = ( low+high ) / 2;
if ( x < a[mid] )
bsearch( a , x , low , mid-1 );
else if ( x > a[mid] )
bsearch (a , x , mid+1 , high );
else
return mid;
}
return -1; }
‌‫رابطه‬‌‫بازگشتي‬‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌:‌‫جواب‌رابطه‬‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌‌:‌‫مرتبه‬‌‌:
13
1)
2
()( 
n
TnT)(lgnO   1lg n
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫جستجوي‌دودويي‬
‫حداکثر‬‫تعداد‬‫مقايسه‬‫ها‬‫براي‬‫پیدا‬‫کردن‬‫عنصري‬‫به‬‫روش‬‫جستجوي‬‫دودويي‬‫در‬‫يک‬‫آرايه‬:
‫با‬‫هزار‬‫عنصر‬:10
‫با‬‫ده‬‫هزار‬‫عنصر‬:14
‫با‬‫صد‬‫هزار‬‫عنصر‬:17
‫با‬‫يک‬‫میلیون‬‫عنصر‬:20
‫بنابراين‬‫برتري‬‫جستجوي‬‫دودويي‬‫به‬‫جستجوي‬‫خطي‬،‫در‬‫آرايه‬‫با‬‫تعداد‬‫عناصر‬،‫زياد‬‫بیشتر‬‫خود‬‫را‬‫نشان‬‫مي‬‫دهد‬.
14
highmid+1midmid-1low
……
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‌‫درج‌در‬‫آرايه‬
‌‫تابع‬insert‌‫،‌مقدار‬x‌‌‫را‌در‌مکان‬k‌‫ام‬‌‫آرايه‬a،‫‌کند‬‫ي‬‫اضافه‌م‬.
‌‫فرض‌شده‌که‌آرايه‬a‌‫داراي‬n‌‫خانه‌است‌که‬m‌‫عنصر‬‌‫آن‌پر‌است‬:(m<n)
‫مثال‬‌‌:X=‘A’,k=0,n=7,m=5
insert (a[ ] , m , k , x)
{
for ( i = m-1 ; i >= k ; i-- )
a[i+1] = a[i];
a[k] = x;
}
‌‫تعداد‬‌‫شیفت‌مورد‌نیاز‬‌:
15
km 
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫حذف‌از‌آرايه‬
‫تابع‬‫زير‬k‫امین‬‫عنصر‬‫آرايه‬a‫را‬‫حذف‬‫کرده‬‫و‬‫آن‬‫را‬‫در‬‫متغیر‬x‫قرار‬‫‌دهد‬‫ي‬‫م‬.(k<=n)
delete( a[ ] , n , k , x )
{
x = a[k];
for ( i = k ; i<n ; i++ )
a[i] = a[i+1];
a[i] = 0;
return(x);
}
16
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‌‫ماتريس‬
‫ماتريس‬‫هاي‬‫معروف‬‫عبارتند‬‫از‬:
1-‫ماتريس‬‫اسپارس‬
2-‫ماتريس‬‫مثلثي‬(‫پايین‬‫مثلثي‬‫و‬‫باال‬‫مثلثي‬)
3-‫ماتريس‬‫قطري‬(‫سه‬‫قطري‬،‫پنج‬‫قطري‬‫و‬...)
17
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫اسپارس‬ ‫ماتریس‬(‫خلوت‬)
‫ماتريسي‬‫که‬‫داراي‬‫تعداد‬‫نسبتا‬‫زيادي‬‫عنصر‬‫صفر‬‫باشد‬‫را‬‫ماتريس‬‫اسپارس‬(‫خلوت‬‫يا‬‫تنک‬)‫مي‬‫نامند‬.
‫در‬‫اين‬،‫ماتريس‬‫براي‬‫کاهش‬‫حافظه‬‫مصرفي‬‫و‬‫زمان‬،‫اجرا‬‫فقط‬‫عناصر‬‫غیرصفر‬‫ماتريس‬‫ذخیره‬‫‌شوند‬‫ي‬‫م‬.
‫مثال‬:
18





















5
2
2
2
3
4
2
1
3
0
0
0
0
0
2
0
5
0
0
0
0
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫مثلثی‬ ‫پایین‬ ‫ماتریس‬
‫ماتريسي‬‫که‬‫تمام‬‫عناصر‬‫باالي‬‫قطر‬‫اصلي‬‫آن‬‫صفر‬‫باشد‬‫را‬‫ماتريس‬‫پايین‬‫مثلثي‬‫مي‬‫گويند‬.‫براي‬‫ذخیره‬‫اين‬‫ماتري‬،‫س‬‫فقط‬‫عناصر‬‫غیر‬
‫صفر‬‫ذخیره‬‫مي‬‫شوند‬.
‫مثال‬:
‫عنصر‬‫واقع‬‫در‬‫سطر‬i‫و‬‫ستون‬j‫ماتريس‬‫مثلثي‬‫در‬‫آدرس‬‫زير‬‫ذخیره‬‫مي‬‫شود‬:
19










1
0
0
4
6
0
5
3
2
a a+1 a+2 a+3 a+4 a+5
2 3 6 5 4 1
1
2
)1(


 j
ii
a
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫ماتریس‬3‫قطری‬
‫ماتريس‬‫سه‬‫قطري‬‫يک‬‫ماتريس‬‫مربعي‬‫مي‬‫باشد‬‫که‬‫ايه‬‫ر‬‫د‬‫هاي‬‫غیر‬‫صفر‬‫آن‬‫روي‬‫قطر‬‫اصلي‬‫و‬‫بالفاصله‬‫باال‬‫و‬‫پائین‬‫قطر‬‫اصلي‬‫ظاهر‬
‫مي‬‫شوند‬.‫تعداد‬‫عناصر‬‫غیر‬‫صفر‬‫در‬‫اين‬‫ماتريس‬‫برابر‬‫مي‬‫باشد‬.
‫مثال‬:
‫عنصر‬‫واقع‬‫در‬‫سطر‬i‫و‬‫ستون‬j‫ماتريس‬‫پايین‬‫مثلثي‬‫در‬‫آدرس‬‫حافظه‬‫زير‬‫ذخیره‬‫مي‬‫شود‬:
20












5
83
0
0
9
4
7
0
0
2
3
23
0
0
1
6
a+9a+8a+7a+6a+5a+4a+3a+2a+1a
598342731236
32  jia
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
‫تمرین‬
1-‫ماتريس‬‫باال‬‫مثلثي‬‫ماتريس‬‫مربعي‬‫است‬‫که‬‫عناصر‬‫پايین‬‫قطر‬‫اصلي‬‫آن‬‫برابر‬‫صفر‬‫هستند‬.‫اگر‬‫عناصر‬‫غیر‬‫صفر‬‫را‬‫به‬‫صورت‬‫ستوني‬
‫در‬‫حافظه‬‫ذخیره‬،‫کنیم‬‫محل‬‫ذخیره‬‫عنصر‬‫واقع‬‫در‬‫سطر‬i‫و‬‫ستون‬j‫اين‬‫ماتريس‬‫در‬‫حافظه‬‫را‬‫مشخص‬‫کنید‬.
2-‫ماتريس‬‫پايین‬‫مثلثي‬‫ماتريس‬‫مربعي‬‫است‬‫که‬‫عناصر‬‫باالي‬‫قطر‬‫اصلي‬‫آن‬‫برابر‬‫صفر‬‫هستند‬.‫اگر‬‫عناصر‬‫غیر‬‫صفر‬‫را‬‫به‬‫صور‬‫ت‬
‫قطري‬‫با‬‫شروع‬‫از‬‫قطر‬‫اصلي‬‫در‬‫حافظه‬‫ذخیره‬،‫کنیم‬‫محل‬‫ذخیره‬‫عنصر‬‫واقع‬‫در‬‫سطر‬i‫و‬‫ستون‬j‫اين‬‫ماتريس‬‫در‬‫حافظه‬‫را‬‫مشخص‬
‫کنید‬.
3-‫ماتريس‬‫پنج‬‫قطري‬‫ماتريس‬‫مربعي‬‫است‬‫که‬‫به‬‫جز‬‫عناصر‬‫قطر‬‫اصلي‬‫و‬‫دو‬‫قطر‬‫باالي‬‫آن‬‫و‬‫دو‬‫قطر‬‫پايین‬،‫آن‬‫ساير‬‫عناصر‬‫براب‬‫ر‬
‫صفر‬‫مي‬‫باشند‬.‫اگر‬‫عناصر‬‫غیر‬‫صفر‬‫را‬‫به‬‫صورت‬‫سطري‬‫در‬‫حافظه‬‫ذخیره‬،‫نمايیم‬‫محل‬‫ذخیره‬‫عنصر‬‫واقع‬‫در‬‫سطر‬i‫و‬‫ستون‬j‫اين‬
‫ماتريس‬‫در‬‫حافظه‬‫را‬‫مشخص‬‫کنید‬.
21
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org
‫ها‬ ‫داده‬‫ساختمان‬
faradars.org/fvds9402
22
‫فرادرس‬ ‫در‬ ‫شده‬ ‫مطرح‬ ‫نکات‬ ‫مبنای‬ ‫بر‬ ‫ها‬ ‫اسالید‬ ‫این‬
«‫ها‬ ‫داده‬ ‫ساختمان‬ ‫های‬ ‫فرادرس‬ ‫مجموعه‬»
‫است‬ ‫شده‬ ‫تهیه‬.
‫به‬ ‫آموزش‬ ‫این‬ ‫مورد‬ ‫در‬ ‫بیشتر‬ ‫اطالعات‬ ‫کسب‬ ‫برای‬‫مراجعه‬ ‫زیر‬ ‫لینک‬‫نمایید‬.
faradars.org/fvds9402
‫س‬‫ر‬‫د‬‫ا‬‫ﺮ‬‫ﻓ‬
FaraDars.org

آموزش ساختمان داده ها - بخش سوم