بستن پنجره
فرادرس - مجموعه آموزش‌های ویدئویی  مهندسی کامپیوتر - طراحی الگوریتم - ساختمان داده
بستن پنجره     از آخرین نوشته‌ها

»    مسابقه‌ی برنامه‌نویسی CodeCup 2018

»    دوره‌ی طراحی و تحلیل الگوریتم دانشگاه استنفورد

»    مسئله‌ی انتخابات

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

       

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

http://www.aachp.ir آنچه می‌خوانید ویراست جدید نوشته‌ای است که اولین بار با عنوان «آرایه پویای دو بعدی در ++C» مرداد ماه 1385 از طریق وبگاه برنامه‌نویسی و طراحی الگوریتم (عنوان و طرح پیشین وبگاه الگوریتمستان) منتشر شده بود.


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

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

  

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;
}
10 .
11 .
12 .
13 for (i = 0 ; i < n ; i ++)
14   delete[] table[i];
15 delete[] table;
16   

    این کد عدد 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]

  

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


نوشته‌های مرتبط
        معرفی انواع ظرف‌ها (نگهدارنده‌ها - containers) در زبان برنامه‌نویسی ++C
        آشنایی با درخت جستجوی دودویی (Binary Search Tree) و عملیات جستجو و درج و حذف گره
        معرفی فایل سرآیند algorithm از کتابخانه قالب استاندارد زبان برنامه‌نویسی ++C به همراه نمونه کد
        آشنایی با صف اولویتی (Priority Queue)، کاربردها و نحوه‌ی پیاده‌سازی آن
        آشنایی با کلاس‌های حافظه و کاربرد آنها در زبان ++C
        آشنایی با درخت Heap (هیپ، هرم یا کپه) به عنوان یکی از ساختمان های داده پرکاربرد و بررسی روش ساخت، درج گره و حذف گره و ارائه‌ی کد نمونه به زبان برنامه‌نویسی ++C
        آشنایی با حلقه‌های تکرار در زبان برنامه‌نویسی ++C و دستورات کنترلی مورد استفاده در آن
        بررسی مفهوم و روش پیاده‌سازی لیست پیوندی و توابع مرتبط آن به زبان برنامه‌نویسی ++C
        پنج نکته‌ی آموزنده در مورد برنامه‌نویسی به زبان برنامه‌نویسی ++C
        آشنایی با توابع دوست کلاس در زبان برنامه‌نویسی ++C و کاربرد آنها در سربارگذاری عملگرها
پیوند کوتاه صفحه دسته‌بندی
امتیاز نوشته
  • 1
  • 2
  • 3
  • 4
  • 5
ارسال پیام

نام: *  

پست الکترونیک:

وبگاه:

متن پیام: *

right 01 02 03 04 05 06 07 08 09 10 11 12 13 14 left

 


» s

پنجشنبه، ۱۱ آذر ماه ۱۳۹۵، ساعت ۱۳:۳۲
برنامهای بنویسید که در یک آرایه ی دوبعدی مستطیلی m* n  پیدا کند که جمع اعدادش ماکسیمم شود

» محمد

جمعه، ۲۸ آبان ماه ۱۳۹۵، ساعت ۲۱:۴۵
برنامه ای که 20عددازورودی بگيرد بیشترین و کمترین عدد در هر ستون رانمايش دهد در زبان ++c?

» فاطمه

پنجشنبه، ۱ مهر ماه ۱۳۹۵، ساعت ۰۸:۲۳
من معذرت میخام اشتباه گفتم. یک ماتریس دارم ک 1200سطر و دوتا ستون داره.میخام اعداد ستون دوم رو یکی یکی بخونه و بذاره توی یک معادله.


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

» فاطمه

چهارشنبه، ۳۱ شهریور ماه ۱۳۹۵، ساعت ۲۲:۴۲
تعدادی اعداد توی یک ماتریس دو در دو دارم، میخوام اعداد ستون دوم رو یکی یکی بذارم توی یک معادله. چیکار کنم؟ممنون میشم از راهنماییتون


چهارشنبه، ۳۱ شهریور ماه ۱۳۹۵، ساعت ۲۲:۵۳
مسعود:
منظورتون رو از تعدادی اعداد در ماتریس دو در دو متوجه نشدم. چندین ماتریس دو در دو دارید؟ ستون دوم یه ماتریس دو در دو فقط دو عدد داره و نمی‌تونه تعداد اعداد متفاوت باشه.

» رضوی

چهارشنبه، ۲۰ فروردین ماه ۱۳۹۳، ساعت ۱۹:۵۹
برای من در خط
  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) باشه.

» مهسا

جمعه، ۱۹ مهر ماه ۱۳۹۲، ساعت ۲۱:۴۳
سلام ممنونم از سایت خوبتون!
سوالم اینه آیا تو زبان سی++ این امکان وجود داره که k عنصر آخر یک آرایه ی n عنصری رو حذف کرد؟
اگه جواب مثبت هست میتونم خواهش کنم سینتکسش رو بنویسید؟

» سروه

جمعه، ۲۷ آبان ماه ۱۳۹۰، ساعت ۲۳:۲۲
سلام .وقت بخیر یک سوال داشتم ممنون میشم کمکم کنید
آیا آرایه ساختمان داده است یا ساختار داداه؟

» حامد

چهارشنبه، ۲۴ فروردین ماه ۱۳۹۰، ساعت ۱۶:۵۱
الگوریتمی بنویسید که ترکیب kعنصر را در n خانه محاسبه وچاپ نماید

» حبيب

چهارشنبه، ۱۱ اسفند ماه ۱۳۸۹، ساعت ۱۹:۰۲
كدام مورد ، با توجه به ساختمان داده آرايه به طول n ، صحيح است ؟
1) جمع دو ماتريس از مرتبه n3 است.
2) يافتن عنصر ماكزيمم از مرتبه n2 است.
3) مرتب نمودن آرايه از مرتبه n2 است.
4) پيوند (چسباندن) دو آرايه از مرتبه n2 است.



چهارشنبه، ۱۱ اسفند ماه ۱۳۸۹، ساعت ۲۰:۰۷
مسعود:
1) جمع دو ماتریس از مرتبه n² است.
2) یافتن عنصر ماکزیمم از مرتبه n است.
3) مرتب نمودن آرایه بستگی به نوع مرتب‌سازی می‌تواند از مرتبه n² باشد.
4) پیوند دو آرایه اگر شرط مرتب‌سازی نداشته باشد از مرتبه n است.

» علی

چهارشنبه، ۱۲ آبان ماه ۱۳۸۹، ساعت ۱۶:۴۴
الگوریتمی بنویسید که ماتریسی باmسطر وm ستونرا خوانده و مشخص کند که ایا متقارن است یا خیراگر متقارن است عناصر قطر اصلی وزیر قطر اصلی را چاپ کند

» نیما

چهارشنبه، ۱۱ فروردین ماه ۱۳۸۹، ساعت ۱۴:۲۷
نحوه مقایسه(جستجو) عناصر در ارایه های دوبعدی چطوریه؟


پنجشنبه، ۱۲ فروردین ماه ۱۳۸۹، ساعت ۱۷:۳۱
مسعود:
چینش عناصر آرایه شرط خاصی داره؟