✤  آرایه پویای دو بعدی در ++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]

  

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

مسعود اقدسی فام

مسعود اقدسی فام هستم.

دانش‌آموخته‌ی علوم کامپیوتر و فعال حوزه‌های علم داده و یادگیری ماشین؛ علاقه‌مند به یاد دادن و یاد گرفتن :)

algs.ir/spw8aai     اشتراک‌گذاری در LinkedIn     اشتراک‌گذاری در Twitter     ارسال با Telegram
نوشته‌ها از این دست
       ✦   صف اولویت‌دار
       ✦   لیست پیوندی
آخرین نوشته‌ها
       ✦   الگوریتم آنلاین
نوشته‌های پرمخاطب
  • 1
  • 2
  • 3
  • 4
  • 5

نام: *  

پست الکترونیک (محرمانه):

متن پیام: *  

01 02 06 07 08 09 10 11 12 13 14

• حامد
سه‌شنبه، ۱ خرداد ماه ۱۳۸۶، ساعت ۱۷:۱۰

سلام

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

چطوری میشه یک آرایه دو بعدی رو به صورت زیکزاک چاپ کرد یعنی اول بیاد عنصر 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 ;(((