تبلیغات
برنامه نویسی و الکترونیک - استفاده از ساختمان داده ی Stack ( پشته ) در ++C
 
منوی اصلی


--------------------------

--------------------------

--------------------------

--------------------------


سفارش پروژه

E-Mail :
Mahmood_Mehri@Hotmail.com

سایت برنامه نویس :  Mahmood_M


موضوعات

دانلود نرم افزار
 
تخصصی برنامه نویسی
  تخصصی برق ( الکترونیک )
  کامپوننت ها و ابزارها
  نرم افزارهای متفرقه
برنامه نویسی
  مباحث عمومی
  آموزش Delphi

  آموزش زبان C++ / C
 
آموزش Matlab

  آموزش زبان Assembly
  آموزش DataBase

الکترونیک
  مباحث عمومی
  مباحث عمومی الکترونیک
  معرفی قطعات الکترونیکی
  کار با مولتی متر
  مدارات الکترونیک
  میکروکنترلر
  میکروکنترلرهای AVR
  پروژه ها
مباحث متفرقه
  آموزشهای متفرقه
  معرفی سایت
  معرفی کتاب
  پاسخ به سئوالات
  مطالب عمومی


لینك دوستان
:: جک :: اس ام اس :: عکس
:: الکترونیک 89 گیلان
:: سورسهای نرم افزاری
:: اینترنت بدون تحریم
:: علمی.کتاب.مجله.نرم افزار.مقاله
:: مبارزات آزاد
:: برنامه نویسی از اهل زمین
:: :: جزیره ی دانلود ::
:: :: کامپیوتر و IT ::
:: بزرگترین پایگاه مدل لباس اینترنتی
:: مرکز دانلود ایرانیان
:: پایگاه علمی مهندسی تراشه
:: تمامی راهکارهای کامپیوتری
:: برنامه نویسی و طراحی وب
:: خرید ساعت دیواری
:: :: فناوری روز ::
:: :: همه چیز واسه موبایل ::
:: آموزش تخصصی کامپیوتر
:: * پیاز داغ اینترنت ! *
:: جدیدترین موزیکها و نرم افزارها
:: دانلود سورس ویژوال بیسیک
:: امپراطور دانلود و آموزش
:: موبایل و کامپیوتر
:: جدیدترین آهنگهای هفته
:: درباره ی دلفی !
:: برنامه نویس
:: پروژه های رایگان و آموزش ++C
:: ابراهیم آنلاین

 : " استفاده از ساختمان داده ی Stack ( پشته ) در ++C " :
 
سلام ...
در این پست در مورد Stack و این كه چی هست و نحوه ی پیاده سازی یك نمونه از اون در ++C  بحث خواهیم كرد ...

یك نكته ی مهم
:
سعی می كنم به زبان ساده توضیح بدم و مثل این كتابهای مزخرف دانشگاهی نباشه !!

Stack یا پشته چیست ؟

Stack مانند متغیر به یك قسمت از حافظه اشاره می كنه كه می تونید اطلاعاتی رو درونش قرار بدید ، اما با متغیر تفاوتهایی داره ، تفاوت عمده ی یك نوع Stack با یك متغیر اینه كه Stack میتونه چند ردیف و با چند نوع اطلاعات رو در خودش ذخیره كنه ولی متغیر فقط یك نوع خاص و یك مقدار می تونه داشته باشه ...
به خاطر همین ویژگی هست كه به Stack " پایگاه داده " گفته میشه ، یعنی پایگاهی برای نگهداری داده ها !
حالا چرا " Stack " یا به زبان فارسی " پشته " ؟! ، Stack به معنی قفسه و یا پشته كردن ( یعنی پشت هم قرار دادن ) هم بیان میشه ...
این اسم به خاطر نحوه ی ذخیره سازی و بازیابی داده ها در Stack هست ...

چگونگی ذخیره سازی و بازیابی داده ها در Stack

برای بیان نحوه ی عمل ذخیره سازی در Stack بهترین مثال قفسه ی كتاب هست ! ، فرض كنید 5 كتاب دارید با یك قفسه ی خالی و می خواید كتابها رو درون قفسه قرار بدید ، كتاب اول رو می زارید ، بعد كتاب دوم و بعد كتاب سوم و چهارم و در نهایت پنجم ، حالا برای برداشتن كتابها باید از كتاب پنجم شروع كنیم تا كتاب اول ! ، Stack هم به همین صورت عمل می كنه ، یعنی داده ها پشت سر هم در Stack قرار می گیرند و هنگام بازیابی داده ها اولین داده ای كه در اختیار شما قرار می گیره از بین داده های Stack درواقع آخرین داده ای هست كه در Stack قرار دادید !
به خاطر این ویژگی به پایگاه داده ی Stack ، داده از نوع LIFO هم می گن ، LIFO مخفف عبارت Last-In First-Out و به معنی " آخرین ورودی اولین خروجی " هست كه به نحوه ی عملكرد Stack اشاره می كنه ...

فكر كنم تا اینجا با Stack و نحوه ی كار كردش آشنا شدید ، بهتره نحوه ی استفاده از Stack در ++C رو بررسی كنیم
برای استفاده از Stack در ++C اولین قدم اضافه كردن Header مربوط به Stack به سورس پروژه هست :

#include <stack>

چون كلاس Stack در NameSpace یا فضای نامی ! std تعریف شده ، برای راحتی كار بهتره std رو در برنامه use كنید :

#include <stack>

using namespace std;

int main()
{
 ...


مرحله ی دوم تعریف یك Stack هست كه به سادگی تعریف یك متغیر انجام میشه‌با كمی تفاوت ، مثال :

int main()
{
    stack<int> S;
    ...
 }

با اجرای تكه كد بالا ، S به عنوان یك پایگاه Stack تعریف میشه ...
به نحوه ی تعریف كلاس Stack توجه كنید ، بعد از عبارت Stack باید نوع اطلاعاتی كه قرار هست درش بریزید رو مشخص كنید كه در مثال بالا من از مقدار عددی int استفاده كردم ، می تونید از هر نوعی كه نیاز داشتید استفاده كنید ...
كلاس Stack پنج دستور رو در اختیارتون می زاره كه در زیر می تونید توضیحشون رو ببینید :
  • ()empty  :  این دستور در صورت خالی بودن Stack مقدار True یا 1 و در غیر اینصورت مقدار False یا 0 را بر می گرداند
  • ()pop  :  این دستور مقدار بالایی در Stack را حذف می كند ، درواقغ آخرین داده ی وارد شده و اولین داده ای كه در دسترس هست !
  • ()push  :  این دستور با توجه به نوع مقادیر Stack ( كه در مثال بالا int بود ) یك مقدار را دریافت كرده و در Stack قرار می دهد
  • ()size  :  این دستور تعداد داده های موجود در Stack رو برمی گرداند
  • ()top  :‌  این دستور مقدار داده ی بالایی و در واقع آخرین داده ی ورودی و اولین داده در دسترس یا خروجی را بر میگرداند
برای درك بهتر نحوه ی عمل Stack به تصویر زیر نگاه كنید ! :
--------------------------------------------------------------------

--------------------------------------------------------------------
همونطور كه در تصویر مشخص هست ، دستور ()push مقداری رو به پشته اضافه میكنه و دستور ()pop هم بالاترین داده رو از Stack حذف میكنه ، حتما متوجه شدید كه بالاترین داده یا مقدار همون مقداری هست كه دستور ()top برمیگردونه ...
خوب ، بهتره یك مثال كامل هم براتون بزارم تا كاملا با Stack آشنا بشید ...
به مثال زیر توجه كنید :

#include "stdafx.h"
#include <iostream>
#include <stack>

using namespace std;

int main()
{
    // Define new Stack in Integer Value ...
    stack<int> S;
    
    // Add 5 Element with Values [1..5] in the Stack ...
    for (int i = 1; i<=5; i++)
    {
        S.push(i);
        cout << "Top Value of our Stack is : " << S.top() << endl;
    }
    
    cout << "Size of our Stack is : " << S.size() << endl;
    
    cout << "Deleting Stack Elements ... \n";
    
    // Delete all Elements of Stack ...
    while ( ! S.empty() )
    {
        cout << "Top Value of our Stack is " << S.top() << " and going to be Deleted !\n";     
        S.pop();
    }
    
    cout << "Stack Elements are now Deleted \n";
    cout << "Now our Stack Size is : " << S.size() << endl;

    return 0;
}

سعی كردم مثال رو طوری بنویسم كه تمام اعمال با Stack توش انجام بشه ... !
در مثال بالا ، ابتدا یك Stack با عنوان S و از نوع Int ایجاد میشه ، بعد در یك حلقه ی for  پنج داده با مقادیر 1 تا 5 درون Stack قرار می گیرن ( با دستور ()push ) بعد از هر بار اضافه كردن مقدار به Stack آخرین مقدار ورودی كه اولین مقدار خروجی هست به وسیله دستور ()top گرفته میشه و چاپ میشه ، بعد اندازه یا تعداد داده های Stack به وسیله ی دستور ()size گرفته و چاپ میشه ، در مرحله ی آخر هم با یك حلقه ی while و با شرط خالی نبودن Stack ( به شرط توجه كنید ! ) داده های اون از بالا به پایین حذف میشن ، قبل از حذف شدن هر داده ، توسط دستور ()top مقدار اون داده گرفته شده و چاپ میشه ، در نهایت هم اندازه ی نهایی Stack چاپ میشه كه همونطور كه حتما حدس زدید 0 خواهد بود ...
خروجی این برنامه به شكل زیر هست :

Top Value of our Stack is : 1
Top Value of our Stack is : 2

Top Value of our Stack is : 3
Top Value of our Stack is : 4
Top Value of our Stack is : 5
Size of our Stack is : 5
Deleting Stack Elements ...
Top Value of our Stack is 5 and going to be Deleted !
Top Value of our Stack is 4 and going to be Deleted !

Top Value of our Stack is 3 and going to be Deleted !
Top Value of our Stack is 2 and going to be Deleted !
Top Value of our Stack is 1 and going to be Deleted !
Stack Elements are now Deleted
Now our Stack Size is : 0

به خروجی برنامه دقت كنید ، نحوه ی ثبت و حذف و دسترسی به داده های Stack در این خروجی كاملا مشخص هست ...
توی این پست در مورد كلاس Stack در ++C بیشتر بحث شد ، سعی می كنم در یك پست جدا در مورد نحوه ی پیاده سازی یك Stack هم مطلبی بنویسم ...

امیدوارم مفید بوده باشه ...

منتظر نظرات شما هستم !

موفق باشید ...

 

 :: لینك ثابت نویسنده : محمود مهری نظرات Comment

مطالب اخیر

معرفی کانال و گروه های تلگرام
استفاده از Component Template ها در دلفی
مقاله : نحوه ی استفاده از پنل پیامک در نرم افزار
E-Book :: راه اندازی موتورهای DC و پله ای با استفاده از میکرو کنترلر AVR
آشنایی با عملگرهای بیتی ( Bitwise Operators )
تست دیود و ترانزیستور با مولتی متر
دلفی :: ارسال آرایه به حافظه ی Clipboard
یک سایت فوق العاده برای علاقه مندان به علم فیزیک
مداری برای نمایش عبور جریان برق از بدن !!
سال نو مبارک ...
آدرس وبلاگ !
ساخت یک LED فلاشر با میکروکنترلر AVR ATMega16A
آشنایی با کاربرد " رله " ( Relay ) در مدار
کار با ماتریسها در Matlab
SQL :: آشنایی با دستور شرطی WHERE


صفحات وبلاگ :