پشته (ساختمان داده‌ها)

ساختارهای خطی داده‌ها

آرایه
صف‌گشایی
توده
لیست پیوندی
صف
پشته


پشته[۱][۲] (به انگلیسی: stack) یکی از انواع داده‌ساختارها[۳] (ساختمان داده) است و برای ذخیره و بازیابی داده‌ها کاربرد دارد. پشته در طراحی و پیاده‌سازی سیستم‌های نرم‌افزاری و سخت‌افزاری، فراوان به کار می‌رود. شیوهٔ عملکرد پشته بر اساس سیاست LIFO است.

پشته (stack) ساختمان داده ای است که از لیست یا فهرست برای سازماندهی داده ها استفاده میکند و در عین حال از انتزاع نیز پشتیبانی میکند و یک نوع داده انتزاعی را فراهم میسازد. در پشته عمل اضافه کردن و حذف عنصر، فقط در یک طرف آن، بنام بالای پشته انجام میشود. یعنی عنصری که از همه دیرتر وارد پشته شد، از همه زودتر از پشته حذف میگردد. بهمین دلیل گفته میشود که پشته از سیاست خروج به ترتیب عکس ورود (LIFO) پیروی میکند.

عملیات های پشته در ساختمان داده ها: از آنجایی که عناصر پشته فقط از یک طرف (بالای پشته) قابل دستیابی اند. پس عملیات های متعددی را میتوان روی پشته انجام داد که چند عملیات زیر به‌عنوان عملیات اصلی پشته مطرح اند:

  • Push : که عنصری را به بالای پشته اضافه میکند.
  • Pop : که عنصر بالای پشته را حذف میکند.
  • Peek : که عنصر بالای پشته را بازیابی میکند ولی حذف نمیکند.
  • StackEmpty : که خالی بودن پشته را تست میکند.
  • Clear  : تمام عناصر پشته را حذف میکند.
  • Contains : مشخص میکند که عنصری در پشته وجود دارد یا خیر.
  • CopyTo : محتویات پشته را درآرایه ای از نوع شی کپی میکند.

در حقیقت پشته، یکی از سه بخش تخصیص یافته به یک برنامه در حال اجرا در حافظه (RAM) می‌باشد. پس از اجرای هر برنامه کاربردی آن برنامه برای پردازش توسط پردازشگر، به سه بخش در حافظه تقسیم و ذخیره می‌گردد تا در دسترس پردازشگر قرار بگیرد. این سه بخش شامل موارد زیر هستند:

FIFO و LIFO چیست؟

LIFO کوتاه‌شدهٔ عبارت Last In First Out (آخرین ورودی از همه زودتر خارج می‌شود) است. این سیاست اساس کار پشته‌ها را تشکیل می‌دهد و به مفهوم آن است که آخرین دادهٔ ذخیره شده در پشته، نخستین داده‌ای است که بازیابی می‌شود.

FIFO کوتاه‌شدهٔ عبارت First In First Out (اولین ورودی از همه زودتر خارج می‌شود) است. این سیاست اساس کار صف‌ها را تشکیل می‌دهد و به مفهوم آن است که اولین دادهٔ ذخیره شده در صف، نخستین داده‌ای نیز هست که بازیابی می‌شود.

با توجه به آنچه گفته شد، روشن است که در سیاست LIFO، ورود و خروج داده‌ها، از یک سمت صورت می‌گیرد (در واقع تنها یک سمت تودهٔ داده‌ها باز است) در حالی که در سیاست FIFO، ورود و خروج داده‌ها، از دو سمت صورت می‌گیرد (یک سمت برای ورودی و یک سمت برای خروجی) و ما به دو سر تودهٔ داده‌ها دست‌رسی خواهیم داشت (یکی برای ورود و دیگری برای خروج).

تفاوت پشته و صف

تصویر بالا، یک صف (داده‌های در انتظار پردازش در CPU؛ ورود و خروج داده‌ها در جهت مشخص شده انجام می‌شود و عدد ۱ ورودی و عدد ۰ خروجی هستند) و تصویر پایین یک پشته (دستهٔ کاغذها روی میز؛ تنها به کاغذ رویی دست‌رسی داریم) را نشان می‌دهند
  • دستهٔ کاغذها روی میز، مثالی خوب از پشته‌است. در این حالت ما تنها می‌توانیم بر روی دستهٔ کاغذها، کاغذی بگذاریم و از طرفی تنها می‌توانیم از روی دستهٔ کاغذها، کاغذی برداریم (یعنی ورود و خروج از یک سمت انجام می‌گیرد). روشن است که در این حالت آخرین کاغذی که روی دستهٔ کاغذها قرار داده شده، نخستین کاغذی است که برداشته می‌شود و اولین کاغذی که روی میز گذاشته شده، آخر از همه برداشته خواهد شد.
  • صف نانوایی، مثالی خوب از صف است. در این حالت، برخلاف پشته، آدم‌ها به ته صف اضافه می‌شوند و از سر صف خارج می‌شوند (یعنی ورود و خروج از دو سمت متمایز انجام می‌گیرد). به این ترتیب روشن است که آخرین کسی که وارد صف شده، آخرین کسی است که نان دریافت می‌کند و اولین کسی که وارد صف شده، نخستین فردی است که نان می‌گیرد.

پیاده‌سازی

پشته‌ها ممکن است با هر یک از انواع داده‌ساختارهایی مثل آرایه،[۴] لیست پیوندی[۵] و… پیاده‌سازی شوند. صرف‌نظر از این‌که از کدام‌یک استفاده می‌کنیم، پیاده‌سازی دو تابع Push (برای گذاشتن داده) و Pop (برای برداشتن داده) بسیار مهم است. نکتهٔ مهم دیگر در پیاده‌سازی پشته، نگه‌داشتن اشاره‌گری به آخرین داده است که اصطلاحاً به آن Top گفته می‌شود. اگر فرض کنیم که پشته با آرایه پیاده‌سازی شده باشد، شبه‌کد[۶] تابع‌های Push و Pop به صورت زیر خواهد بود:

شمایی از افزودن یک عنصر به پشته (Push)
شمایی از برداشتن یک عنصر از پشته (Pop)
procedure Push(data d)
begin
   stack[top]:=d; //here "stack" is the array that stores data
   top:=top+1; //here "top" is a pointer to above of top element
end;

function Pop: data
begin
   top:=top-1; //here "top" is a pointer to above of top element
   result:=stack[top]; //here "stack" is the array that stores data
end;

پیچیدگی زمانی در پیاده‌سازی آرایه‌ای

پیچیدگی زمانی[۷] اضافه کردن یک عنصر به یک پشته یا برداشتن یک عنصر از روی یک پشته با پیاده‌سازی آرایه‌ای، از (O(1 است. این موضوع با توجه به شبه‌کد نمونه‌ای که در قسمت قبل برای پیاده‌سازی با آرایه طرح شده‌است، کاملاً قابل توجیه‌است.

می‌بینیم که در پیاده‌سازی آرایه‌ای، پیچیدگی زمانی افزودن و برداشتن عنصرها از پشته و به پشته، با هم متفاوت است. با این وجود اگر پشته را با لیست‌های پیوندی پیاده‌سازی کنیم، به علت ساختار خاص این لیست‌ها، هردوی این اعمال برای پشته (و به همین شکل برای صف)، دارای پیچیدگی زمانی از (O(1 خواهد بود.

چند حالت نامطلوب

هنگام پیاده‌سازی پشته، باید حالت‌های خاص زیر را هم در نظر گرفت:

  • هنگام صدا‌کردن تابع Push در پشته‌ها، در صورتی که پشته پر باشد، خطای سرریز[۸] رخ خواهد داد. البته این اتفاق در صورتی می‌افتد که ظرفیت پشته تعیین‌شده باشد و نتوانیم آن را افزایش دهیم. برای مثال، خطای Stack Overflow در زمانی که حافظهٔ در نظرگرفته شده برای برنامه کافی نباشد، از طرف سیستم‌عامل[۹] تولید می‌شود.
  • هنگام صدا‌کردن تابع Pop در پشته‌ها، در صورتی که پشته خالی باشد، خطای پاریز[۱۰] رخ می‌دهد.
  • هنگام صدا‌کردن تابع Enqueue در صف، اگر صف پر باشد، خطای سرریز رخ خواهد داد. البته این خطا در صورتی اتفاق می‌افتد که ظرفیت پشته تعیین‌شده و محدود باشد و نتوانیم آن را افزایش دهیم.
  • هنگام صدا‌کردن تابع Dequeue در صف، اگر صف خالی باشد، خطای پاریز اتفاق می‌افتد.

کاربردها

پشته‌ها در زمینه‌های بسیاری به کار می‌روند که البته در هر زمینه کارایی مشابهی هم دارند. پشته‌ها برای محاسبهٔ یک عبارت ریاضی به طوری که ابتدا عملوند[۱۱]ها و سپس عملگر[۱۲]ها در پشته قرار می‌گیرند، به کار می‌روند. علاوه بر این، برای مدیریت حافظهٔ موردنیاز برنامه، نگه‌داری روند فراخوانی تابع‌های مختلف در برنامه، برای پیاده‌سازی الگوریتم[۱۳] جستجوی عمق اول[۱۴] و… نیز از پشته‌ها استفاده می‌شود.

روند توسعه

در سیستم‌هایی که به شدت به پشته‌ها وابسته‌اند، علاوه بر تابع‌هایی که گفته شد، تابع‌های دیگری نیز برای آسان‌تر شدن کار پیاده‌سازی می‌شوند و به این ترتیب پشته‌ها توسعه پیدا می‌کنند. برخی از این اعمال را در زیر شرح می‌دهیم:

  • مشابه‌سازی:[۱۵] با یک بار Pop کردن و دو بار Push کردن بالاترین دادهٔ پشته، این داده به دو دادهٔ مشابه تبدیل می‌شود (به عبارت دیگر تکثیر می‌شود).
  • برداشت:[۱۶] بالاترین داده Pop می‌شود ولی اشاره‌گر Top تغییر نمی‌کند؛ به عبارت دیگر، داده به دست ما می‌رسد ولی کماکان در پشته هم وجود دارد.
  • جابه‌جایی:[۱۷] بالاترین دو دادهٔ پشته، با هم جابه‌جا می‌شوند.
  • جابه‌جایی کلی:[۱۸] همه عناصر پشته یکی به سمت پایین جابه‌جا می‌شوند و پایین‌ترین داده در جای بالاترین داده قرار می‌گیرد.

علاوه بر این‌ها، از ترکیب صف و پشته، داده‌ساختار جدیدی[۱۹] هم ایجاد شده‌است که هم امکان افزودن عنصرها را از دوسوی تودهٔ داده‌ها می‌دهد و هم امکان برداشتن آن‌ها را.

پانویس

  1. حمیدرضا مقسمی (۱۳۸۳)، «آرایه و پشته و صف»، ساختمان داده‌ها، گسترش علوم پایه
  2. لاری نایروف (۱۳۸۲ساختمان داده‌ها در ++C، ترجمهٔ جعفرنژاد قمی، نص
  3. Date Structure
  4. Array
  5. Linked List
  6. Pseudocode
  7. Time Complexity
  8. Overflow
  9. Operating System
  10. Underflow
  11. Operand
  12. Operator
  13. Algorithm
  14. Depth-First Search
  15. Duplicate
  16. Peek
  17. Swap
  18. Rotate
  19. Deque

پیوند به بیرون

منابع

  • ویکی‌پدیای انگلیسی
  • Donald Knuth (۱۹۹۷The Art of Computer Programming, Volume 1: Fundamental Algorithms (ویراست ۳rd Edition)، Addison-Wesley، شابک ۰-۲۰۱-۸۹۶۸۳-۴

Read other articles:

AIDC F-CK-1 Ching-kuo adalah pesawat jet tempur buatan Taiwan bermesin ganda (twinjet) yang dinamakan persis dengan president Republik China, Chiang Ching-kuo. Pembuatan Ching Kuo berada dalam proyek IDF / Indigenous Defense Fifhter. Pesawat jet tempur ini dibuat menjadi multirole capability, yaitu pesawat jet yang bisa menjalankan berbagai misi seperti stealth dan airbomber. Sejarah Setelah memburuknya hubungan diplomatik antara Washington dan Taipei pada Januari 1979, suplay militer masa de...

 

Patrick McNair Datos personalesNombre completo Patrick James Coleman McNair[1]​Nacimiento Ballyclare, Irlanda del Norte27 de abril de 1995 (28 años)Nacionalidad(es) Británica NorirlandesaAltura 1,83 m (6′ 0″)Carrera deportivaDeporte FútbolClub profesionalDebut deportivo 2014(Manchester United F. C.)Club Middlesbrough F. C.Liga Football League ChampionshipPosición CentrocampistaDorsal(es) 17Selección nacionalSelección NIR Irlanda del NorteDebut 25 de marzo de 201...

 

هذه المقالة يتيمة إذ تصل إليها مقالات أخرى قليلة جدًا. فضلًا، ساعد بإضافة وصلة إليها في مقالات متعلقة بها. (يوليو 2019) روبرت لويد   معلومات شخصية الميلاد 5 يونيو 1959 (64 سنة)  مواطنة المملكة المتحدة  الحياة العملية المهنة موسيقي  اللغات الإنجليزية  تعديل مصدري - تعدي...

Löwenstein Concepção artística da cidade no século XIX Brasão Mapa LöwensteinMapa da Alemanha, posição de Löwenstein acentuada Administração País  Alemanha Estado Baden-Württemberg Região administrativa Estugarda Distrito Heilbronn Prefeito Klaus Schifferer Estatística Coordenadas geográficas 49° 6' N 9° 6' E Área 23.46 km² Altitude 385 m População 3106 (2006-12-31) Densidade populacional hab./km² Outras Informações Placa de veículo HN Código postal 74...

 

بي إم بيامتداد الملف bmp[1]، dib[2]، rle[2]صيغة وسائط الإنترنت image/bmp[3][4] — image/x-bmpتوقيع الملف/عدد سحري 424Dالمطور مايكروسوفت[5][6]تعديل - تعديل مصدري - تعديل ويكي بيانات بنية لملف صورة بي إم بي صيغة ملفات بي إم بي (بالإنجليزية: BMP file format)‏ وتدعى أحياناً باسم bit...

 

Railway station in Tamil Nadu Peralam Junction Indian Railways stationGeneral informationLocationNannilam taluk, Thiruvarur road, Peralam, Tamil Nadu, Pincode-609405IndiaCoordinates10°57′28″N 79°39′24″E / 10.95778°N 79.65667°E / 10.95778; 79.65667Elevation11 metres (36 ft)Owned byIndian RailwaysOperated bySouthern RailwayLine(s)Chennai Egmore–Thiruvarur branch line (towards MVTooltip Mayiladuthurai Junction railway station and TVRTooltip Thiruvarur J...

Рисунок художника: аккреционный диск горячей постоянной плазмы, вращающийся вокруг чёрной дыры Исчезнове́ние информации в чёрной дыре́ — гипотетическое явление, которое должно происходить в чёрной дыре, если она действительно подчиняется термодинамическому описа...

 

Art movement A Sunday Afternoon on the Island of La Grande JatteArtistGeorges SeuratYear1884–1886MediumOil on canvasDimensions207.6 cm × 308 cm (81.7 in × 121.3 in)LocationArt Institute of Chicago, Chicago Neo-Impressionism is a term coined by French art critic Félix Fénéon in 1886 to describe an art movement founded by Georges Seurat. Seurat's most renowned masterpiece, A Sunday Afternoon on the Island of La Grande Jatte, marked the beginning ...

 

Olympic shooting event Men's 50 metre pistolat the Games of the XXXI OlympiadAerial view of the National Shooting Center in Deodoro, where the men's 50 metre pistol took place.VenueNational Shooting CenterDate10 August 2016Competitors41 from 29 nationsWinning score193.7 ORMedalists Jin Jong-oh  South Korea Hoàng Xuân Vinh  Vietnam Kim Song-guk  North Korea← 2012 Shooting at the2016 Summer OlympicsQualificationRifle50 m rifle three positionsmenwomen50 m ri...

Air Nepal International IATA ICAO Kode panggil XN NPL AIR NEPAL Didirikan24 Juli 2005Berhenti beroperasi15 Maret 2006ArmadaBoeing 767-300TujuanKathmandu, Kuala Lumpur, Doha, Dubai dan BangkokSloganTop of the world experienceKantor pusatKathmandu, Nepal Air Nepal International adalah maskapai penerbangan yang berbasis di Kathmandu, Nepal, dan mengoperasikan layanan internasional ke Kuala Lumpur, Doha, Dubai dan Bangkok. Maskapai ini berhenti beroperasi pada Maret 2006.[1] Armada Pada s...

 

Roman Catholic church in Negros Oriental, Philippines Church in Negros Oriental, PhilippinesDumaguete CathedralSaint Catherine of Alexandria Cathedral ParishThe cathedral in January 2023Dumaguete CathedralLocation in the VisayasShow map of VisayasDumaguete CathedralLocation in the PhilippinesShow map of Philippines9°18′19″N 123°18′25″E / 9.305362°N 123.307016°E / 9.305362; 123.307016LocationDumaguete, Negros OrientalCountryPhilippinesDenominationRoman Catho...

 

Веслав Михниковскийпольск. Wiesław Michnikowski Дата рождения 3 июня 1922(1922-06-03) Место рождения Варшава, Польша Дата смерти 29 сентября 2017(2017-09-29) (95 лет) Место смерти Варшава, Польша Гражданство  Польша Профессия актёр Карьера с 1945 Направление кинематограф, театр, радио, ...

American actor Austin St. JohnAustin St. John at GalaxyCon Austin in 2023BornJason Lawrence GeigerAlma materConcordia UniversityOccupationsActormartial artistparamedicYears active1993–presentKnown forMighty Morphin Power Rangers portraying Jason Lee ScottHeight178 cm (5 ft 10 in)Children3Websitehttps://www.austinstjohn.biz Jason Lawrence Geiger,[1] professionally known as Austin St. John, is an American actor, martial artist, and paramedic best known fo...

 

American sitcom This article is about the 1989 television series. For other television series with the same title, see Heartland (disambiguation). HeartlandCreated byDon ReoStarringBrian KeithRichard GillilandKatie LaymanOpening themeperformed by Dion DiMucciCountry of originUnited StatesOriginal languageEnglishNo. of seasons1No. of episodes10ProductionCamera setupMulti-cameraRunning time30 minutesProduction companiesImpact Zone ProductionsWitt/Thomas ProductionsOriginal releaseNetworkCB...

 

Singapore media award This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Star Awards for Top 10 Most Popular Female Artistes – news · newspapers · books · scholar · JSTOR (May 2022) (Learn how and when to remove this template message) Star Awards for Top 10 Most Popular Female Artistes十大最受欢迎女艺...

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Basavanagudi – news · newspapers · books · scholar · JSTOR (September 2011) (Learn how and when to remove this template message) Neighbourhood in Bangalore, Karnataka, IndiaBasavanagudiNeighbourhoodBull Temple, BasavanagudiBasavanagudiCoordinates: 12°56′N 77...

 

Indian actor Rajat TokasTokas as AkbarEducationHope hall foundation schoolOccupationIndian television ActorYears active1999–2019Notable workDharti Ka Veer Yodha Prithviraj ChauhanDharam VeerJodhaa AkbarChandra NandiniNaaginSpouse Shrishti Nayyar ​(m. 2015)​ Rajat Tokas is an Indian television actor. He appeared in television series like Dharam Veer, Tere Liye, Naagin and Chandra Nandini. He is widely recognised for playing the titular character of Prithvira...

 

British politician For the American labor union leader, see Simon Burns (unionist). The Right HonourableSir Simon BurnsMinister of State for TransportIn office4 September 2012 – 4 October 2013[1]Prime MinisterDavid CameronPreceded byTheresa VilliersSucceeded byThe Baroness KramerMinister of State for Health ServicesIn office12 May 2010 – 4 September 2012Prime MinisterDavid CameronPreceded byMike O'BrienSucceeded byDan PoulterLord Commissioner of the TreasuryIn of...

24時間テレビ 「愛は地球を救う」 > 24時間テレビ 愛は地球を救う18 24時間テレビ 愛は地球を救う18もう一度、チャレンジ 番組の生放送が行われた日本武道館ジャンル 大型特別番組司会者 徳光和夫永井美奈子(日本テレビアナウンサー)出演者 鈴木杏樹SMAP久本雅美間寛平エンディング 『サライ』国・地域 日本言語 日本語製作製作 日本テレビ 放送放送チャンネル...

 

American politician and judge John DickPortrait of John Dick, American politician and judgeMember of the U.S. House of Representativesfrom Pennsylvania's 25th districtIn officeMarch 4, 1853 – March 3, 1859Preceded byWilliam Henry KurtzSucceeded byElijah Babbitt Personal detailsBorn(1794-06-17)June 17, 1794Pittsburgh, Pennsylvania, USDiedMay 29, 1872(1872-05-29) (aged 77)Political partyWhigOppositionRepublican John Dick (June 17, 1794 – May 29, 1872) was an Am...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!