الگوریتمستان - آرایه پویای دو بعدی در ++C

آموزش استفاده از آرایه پویای دو بعدی در زبان ++C

✤    ۱۰ مرداد ۱۳۸۵ - آخرین به‌روزرسانی: ۱۱ خرداد ۱۳۸۸

آرایه‌های دو بعدی کاربردهای بسیاری از جمله جداول و ماتریس‌ها دارند. اهمیت تعریف آرایه‌های پویای دو بعدی کمتر از آرایه‌های یک بعدی نیست. آرایه‌های پویای دو بعدی یک ویژگی جالب در مقایسه با آرایه ایستا دارند. شما با تعریف پویای آرایه‌های دو بعدی می‌توانید جداول غیرمستطیلی تشکیل دهید. در واقع وقتی آرایه‌های دو بعدی را به صورت پویا ایجاد می‌کنید، این اختیار را دارید که تعداد ستون‌های هر ردیف را متفاوت انتخاب کنید.

به قطعه کد زیر توجه کنید:

  

int **table;

cin >> n;

table = new int*[n];

int i, j;

for (i = 1 ; i <= n ; i++){

  table[i - 1] = new int[i];

  for (j = 1 ; j <= i ; j++)

    table[i - 1][j - 1] = i * j;

}

.

.

.

for (i = 0 ; i < n ; i ++)

  delete[] table[i];

delete[] table;

  

این کد عدد n را از کاربر گرفته و نیمه پایینی جدول ضرب n در n را در یک آرایه پویا ذخیره می‌کند. جدول ضرب اعداد متقارن است و نیازی به ذحیره کردن اعداد همه خانه‌های جدول نیست. در نتیجه با آرایه پویای دو بعدی حافظه مصرفی تقریبا نصف می‌شود.

متغیر table که به صورت table** تعریف شده است، یک اشاره‌گر به اشاره‌گر است. کامپایلر وقتی با دستور

  

table = new int*[n];

  

مواجه می‌شود، یک آرایه پویای یک بعدی به طول n از اشاره‌گرهای صحیح ایجاد می‌کند. پس عناصر

  

table[0], table[1], ..., table[n - 1]

  

هر کدام یک اشاره‌گر از نوع صحیح هستند. حال با دستور

  

table[i - 1] = new int[i]

  

برای هر اشاره‌گر یک آرایه پویای یک بعدی منسوب می‌کنیم.

مثلا به ازای n = 3 عناصر table به صورت زیر هستند:

  

table[0][0]

table[1][0], table[1][1]

table[2][0], table[2][1], table[2][2]

  

با استفاده از چنین ساختاری به سادگی می‌توانید ماتریس‌ها و سایر داده‌ها با فرم چدول دو بعدی را پیاده‌سازی کنید. بزرگترین مزیت این حالت به حالت آرایه استاتیک استفاده صحیح از حافظه در دسترس است.


نسخه‌ی اولیه‌ی این نوشته از وب‌سایت برنامه‌نویسی و طراحی الگوریتم به الگوریتمستان منتقل شده است.

تا کنون ۵۴ امتیاز ثبت شده
نوشته لایک نداشت؟
 
به اشتراک گذاری نوشته

amasoudfam.ir/l/w8aai

اشتراک‌گذاری در LinkedIn     اشتراک‌گذاری در Twitter     ارسال با Telegram

نام: *  
پست الکترونیک (محرمانه):
پیام: *  
• حامد
۱ خرداد ۱۳۸۶، ساعت ۱۷:۱۰

سلام

من یه سوال دارم

چطوری میشه یک آرایه دو بعدی رو به صورت زیکزاک چاپ کرد یعنی اول بیاد عنصر 1و1 چاپ بعد 2و1 بعد 1و2بعد1و3

لطفا جواب من رو بدید

• مهران
۶ خرداد ۱۳۸۶، ساعت ۱۴:۰۸

من یه سوال دارم

چطوری می شه حلقه نوشت که دو مقدار اولیه داشته باشه

یعنی یه بار از 0 و یه بار از2شروع کنه

• الناز
۶ آبان ۱۳۸۶، ساعت ۰۲:۴۹

در مورد radix sort  توضیح دهید

• نیما
۱۱ فروردین ۱۳۸۹، ساعت ۱۴:۲۷

نحوه مقایسه(جستجو) عناصر در ارایه های دوبعدی چطوریه؟

۱۲ فروردین ۱۳۸۹، ساعت ۱۷:۳۱
• مسعود اقدسی‌فام

چینش عناصر آرایه شرط خاصی داره؟

• علی
۱۲ آبان ۱۳۸۹، ساعت ۱۶:۴۴

الگوریتمی بنویسید که ماتریسی باmسطر وm ستونرا خوانده و مشخص کند که ایا متقارن است یا خیراگر متقارن است عناصر قطر اصلی وزیر قطر اصلی را چاپ کند

• حبيب
۱۱ اسفند ۱۳۸۹، ساعت ۱۹:۰۲

كدام مورد ، با توجه به ساختمان داده آرايه به طول n ، صحيح است ؟

1) جمع دو ماتريس از مرتبه n3 است.

2) يافتن عنصر ماكزيمم از مرتبه n2 است.

3) مرتب نمودن آرايه از مرتبه n2 است.

4) پيوند (چسباندن) دو آرايه از مرتبه n2 است.

۱۱ اسفند ۱۳۸۹، ساعت ۲۰:۰۷
• مسعود اقدسی‌فام

1) جمع دو ماتریس از مرتبه n² است.

2) یافتن عنصر ماکزیمم از مرتبه n است.

3) مرتب نمودن آرایه بستگی به نوع مرتب‌سازی می‌تواند از مرتبه n² باشد.

4) پیوند دو آرایه اگر شرط مرتب‌سازی نداشته باشد از مرتبه n است.

• حامد
۲۴ فروردین ۱۳۹۰، ساعت ۱۶:۵۱

الگوریتمی بنویسید که ترکیب kعنصر را در n خانه محاسبه وچاپ نماید

• سروه
۲۷ آبان ۱۳۹۰، ساعت ۲۳:۲۲

سلام .وقت بخیر یک سوال داشتم ممنون میشم کمکم کنید

آیا آرایه ساختمان داده است یا ساختار داداه؟

• مهسا
۱۹ مهر ۱۳۹۲، ساعت ۲۱:۴۳

سلام ممنونم از سایت خوبتون!

سوالم اینه آیا تو زبان سی++ این امکان وجود داره که k عنصر آخر یک آرایه ی n عنصری رو حذف کرد؟

اگه جواب مثبت هست میتونم خواهش کنم سینتکسش رو بنویسید؟

• رضوی
۲۰ فروردین ۱۳۹۳، ساعت ۱۹:۵۹

برای من در خط

 table[ i - 1 ] = new int[ i ];

این ارور رو میده:

Error 2 error C2108: subscript is not of integral type g:\02. fayyazi marzieh\testttt\testttt\tesssst.cpp 12

به خدا دیوانه شدم.

۲۱ فروردین ۱۳۹۳، ساعت ۰۰:۳۵
• مسعود اقدسی‌فام

متغیر i از چه نوعی تعریف شده؟ باید عدد صحیح (int) باشه.

• فاطمه
۳۱ شهریور ۱۳۹۵، ساعت ۲۲:۴۲

تعدادی اعداد توی یک ماتریس دو در دو دارم، میخوام اعداد ستون دوم رو یکی یکی بذارم توی یک معادله. چیکار کنم؟ممنون میشم از راهنماییتون

۳۱ شهریور ۱۳۹۵، ساعت ۲۲:۵۳
• مسعود اقدسی‌فام

منظورتون رو از تعدادی اعداد در ماتریس دو در دو متوجه نشدم. چندین ماتریس دو در دو دارید؟ ستون دوم یه ماتریس دو در دو فقط دو عدد داره و نمی‌تونه تعداد اعداد متفاوت باشه.

• فاطمه
۱ مهر ۱۳۹۵، ساعت ۰۸:۲۳

من معذرت میخام اشتباه گفتم. یک ماتریس دارم ک 1200سطر و دوتا ستون داره.میخام اعداد ستون دوم رو یکی یکی بخونه و بذاره توی یک معادله.

۲ مهر ۱۳۹۵، ساعت ۱۹:۳۲
• مسعود اقدسی‌فام

اگه فرض کنیم اسم ماتریستون matrix باشه، یه حلقه‌ی تکرار for تعریف کنید که i از صفر تا 1199 حرکت کنه و هر بار matrix[i][1] در معادله قرار بگیره.

• محمد
۲۸ آبان ۱۳۹۵، ساعت ۲۱:۴۵

برنامه ای که 20عددازورودی بگيرد بیشترین و کمترین عدد در هر ستون رانمايش دهد در زبان ++c?

• s
۱۱ آذر ۱۳۹۵، ساعت ۱۳:۳۲

برنامهای بنویسید که در یک آرایه ی دوبعدی مستطیلی m* n  پیدا کند که جمع اعدادش ماکسیمم شود

• سید ابوالفضل
۲۸ آبان ۱۳۹۶، ساعت ۲۰:۳۶

ممنون مثل همیشه عالی

• سارا
۱۷ دی ۱۳۹۸، ساعت ۲۳:۱۰

سلام.خسته نباشید.

سوال من اینه که باید ماترریسی به شکل اکسل تهیه کنم که ردیف i=0 اون رو فقط حروفی همانند اکسل داشته باشه و j=0 اون رو از اعداد پر کنیم و میخوایم که بقیه درایه ها خالی باشن و خود کاربر دستور بده که توی چه درایه ای چه عددی قرار بگیره و یه سری عملیت روی اون انجام بدیم.

میشه کمکم کنید که دقیقا چیکار کنم؟

خواهش میکنم به سوالم جواب بدین0202 ;(((