Instructor: Mr.Vahidipour

Slides:



Advertisements
Similar presentations
Queues Printer queues Several jobs submitted to printer Jobs form a queue Jobs processed in same order as they were received.
Advertisements

STACKS & QUEUES. Stacks Abstract data types An abstract data type (ADT) is an abstraction of a data structure An ADT specifies : –Data stored –Operations.
Stacks, Queues, and Linked Lists
Senem Kumova Metin Spring2009 STACKS AND QUEUES Chapter 10 in A Book on C.
Queue Definition Ordered list with property: –All insertions take place at one end (tail) –All deletions take place at other end (head) Queue: Q = (a 0,
Queues. Queue Definition Ordered list with property: All insertions take place at one end (tail) All insertions take place at one end (tail) All deletions.
Templates in C++ Template function in C++ makes it easier to reuse classes and functions. A template can be viewed as a variable that can be instantiated.
Stacks and Queues 2014, Fall Pusan National University Ki-Joune Li.
Data Structure (Part I) Stacks and Queues. Introduction to Stack An stack is a ordered list in which insertion and deletions are made at one end. –The.
Data Structures (Second Part) Lecture 3 : Array, Linked List, Stack & Queue Bong-Soo Sohn Assistant Professor School of Computer Science and Engineering.
A queue is an ADT which allows data values to be accessed only one at a time and only the first inserted. The rule imposed on a queue is: First In First.
What is a Queue? n Logical (or ADT) level: A queue is an ordered group of homogeneous items (elements), in which new elements are added at one end (the.
ADT Stacks and Queues. Stack: Logical Level “An ordered group of homogeneous items or elements in which items are added and removed from only one end.”
Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 18 Stacks.
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 18: Stacks And Queues.
Copyright © 2012 Pearson Education, Inc. Chapter 18: Stacks And Queues.
Data Structure Dr. Mohamed Khafagy.
Queue Overview Queue ADT Basic operations of queue
A stack is a data linear data structure in which addition of new element or deletion of an existing element always takes place at the same end. This.
COP3538 – Data Structures Using OOP Chapter 4 – Stacks and Queues.
Chapter 3 1. Templates in C++ Template function in C++ makes it easier to reuse classes and functions. A template can be viewed as a variable that can.
Stack and Queue COMP171 Fall Stack and Queue / Slide 2 Stack Overview * Stack ADT * Basic operations of stack n Pushing, popping etc. * Implementations.
Copyright © 2014, 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Eighth Edition by Tony Gaddis,
Introduction to C Programming CE Lecture 11 Sorting and Searching using Arrays.
Tirgul 3 Subjects of this Tirgul: Linked Lists Doubly-Linked Lists Sparse Matrices Stack Queue.
Stacks CS-240 Dick Steflik. Stacks Last In, First Out operation - LIFO As items are added they are chronologically ordered, items are removed in reverse.
Stacks and Queues COMP171 Fall Stack and Queue / Slide 2 Stack Overview * Stack ADT * Basic operations of stack n Pushing, popping etc. * Implementations.
Chapter 3. Templates in C++ Template function in C++ makes it easier to reuse classes and functions. A template can be viewed as a variable that can be.
Copyright © 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Sixth Edition Chapter 18: Stacks and.
Stacks  Standard operations: IsEmpty … return true iff stack is empty Top … return top element of stack Push … add an element to the top of the stack.
CS 106 Introduction to Computer Science I 12 / 13 / 2006 Instructor: Michael Eckmann.
DATA STRUCTURES AND ALGORITHMS Lecture Notes 4 Prepared by İnanç TAHRALI.
Copyright © 2012 Pearson Education, Inc. Chapter 18: Stacks And Queues.
Cosc237/data structures1 Data Types Every data type has two characteristics: 1.Domain - set of all possible values 2.set of allowable operations Built-in.
Queues. Queue Definition Ordered list with property: All insertions take place at one end (tail) All insertions take place at one end (tail) All deletions.
Data Structures (part 2). Stacks An Everyday Example Your boss keeps bringing you important items to deal with and keeps saying: “Put that last ‘rush’
1 Stacks and Queues Based on D.S. Malik, Java Programming: Program Design Including Data Structures.
Lab 7 Queue ADT. OVERVIEW The queue is one example of a constrained linear data structure. The elements in a queue are ordered from least recently added.
Stack Overview. Stack Stack ADT Basic operations of stack – Pushing, popping etc. Implementations of stacks using – array – linked list.
1 Linked-list, stack and queue. 2 Outline Abstract Data Type (ADT)‏ Linked list Stack Queue.
Starting Out with C++ Early Objects Seventh Edition by Tony Gaddis, Judy Walters, and Godfrey Muganda Chapter 18: Stacks and Queues.
Data Structures Chapter 6. Data Structure A data structure is a representation of data and the operations allowed on that data. Examples: 1.Array 2.Record.
Lab 6 Stack ADT. OVERVIEW The stack is one example of a constrained linear data structure. In a stack, the elements are ordered from most recently added.
Chap 3 Stack and Queue. Templates in C++ Template function in C++ makes it easier to reuse classes and functions. A template can be viewed as a variable.
STACK Data Structure
Chapter 4 ADTs Stack and Queue. 4-2 Formal ADT Specifications The Java interface construct lets us collect together method interfaces into a syntactic.
 2000 Deitel & Associates, Inc. All rights reserved. 12.1Introduction Templates - easily create a large range of related functions or classes –function.
Copyright © 2015, 2012, 2009 Pearson Education, Inc., Publishing as Addison-Wesley All rights reserved. Chapter 18: Stacks and Queues.
Dale Roberts Department of Computer and Information Science, School of Science, IUPUI CSCI 240 Abstract Data Types Queues Dale Roberts, Lecturer
Stacks.
Chapter 18: Stacks and Queues.
Stacks and Queues CMSC 202.
Stack and Queue.
Stacks Data Structures and Problem Solving with C++: Walls and Mirrors, Carrano and Henry, © 2013.
Chapter 19: Stacks and Queues.
Queues.
ليست هاي پيوندي.
COMPUTER 2430 Object Oriented Programming and Data Structures I
2017, Fall Pusan National University Ki-Joune Li
Queues: Implemented using Arrays
ADT list.
Introduction to Programming
2018, Fall Pusan National University Ki-Joune Li
CSC 143 Stacks [Chapter 6].
Stacks and Queues 1.
Stacks.
Python: Stacks and Queues (as an Array)
Abstract Data Types Stacks CSCI 240
COMPUTER 2430 Object Oriented Programming and Data Structures I
2019, Fall Pusan National University Ki-Joune Li
Presentation transcript:

Instructor: Mr.Vahidipour پشته Stack Instructor: Mr.Vahidipour

تعريف حالت خاصي از نوع داده عمومي ليستهاي مرتب شده LIFO ( Last in first out) ساختمان داده نيست بلكه نحوه استفاده از يك ساختمان داده است. يك آرايه نقش پشته را بازي مي كند اگر :جايگذاري و حذف از يك سمت (top) انجام شود.

ADT پشته class Stack { //Object: A finite ordered list with zero or more elements public: Stack(int MaxStackSize=DefauktSize); Boolean IsFull(); void Push (int &item); Boolean IsEmpty(); int* Pop(); }

مثال

طراحي كلاس Stack نوع متغيري كه در داخل استك نگهداري مي شود متفاوت است. بهتر نيست که يک بار يک ليست را طراحی کنيم و چندين بار از آن استفاده کنيم؟ C++ اين امکان را به ما می دهد. برای اين که بتوانيم از يک استك برای چند بار استفاده کنيم بايد از کلاس های الگو(template) استفاده کنيم.

چگونگی کار با template دستور template <class KeyType> را قبل از هر کلاس وهر تابعی که در آن از template استفاده می شود قرار داده می شود. به جای KeyType می توان هر اسم ديگر که در شرايط اسم در C++ صدق می کند استفاده کرد با اين شرط که بعد از اسم گذاری فقط ازهمان اسم استفاده شود.

چگونگی کار با template- ادامه template <class KeyType> retValType myClass< KeyType > :: Func(paramet list) { declaration and statements } template <class KeyType > void Stack< KeyType > :: Push(KeyType newElement) //declaration and statements

چگونگی کار با template- ادامه هر جا لازم است متغيری از نوع الگو استفاده شود از قوانين تعريف و استفاده از متغير معمولی استفاده می کنیم. مثلا برای ارسال به تابع از روش زير استفاده می کنیم. retValType Function(KeyType value){}

چگونگی کار با template- ادامه برای ساختن شيئی از يک کلاس از نوع متغيری که ميخواهيم از دستورالعمل زير استفاده می کنيم: myClass <valueType> myObject; مثال: Stack <int> intStack; که يک شی پشته با نوع اعداد صحيح ايجاد می کند. نکته : پس از تعيين نوع شی نمی توان از نوع ديگر به شی فرستاد خطای زمان کامپايل، اجرا و يا از دست دادن اطلاعات

ADT پشته با استفاده از template template <class KeyType> class Stack { //Object: A finite ordered list with zero or more elements public: Stack(int MaxStackSize=DefauktSize); Boolean IsFull(); void Push (const KeyType &item); Boolean IsEmpty(); KeyType* Pop(); }

Boolean Stack<KeyType>:: IsFull() Stack <KeyType>::Stack(int MaxStackSize):MaxSize(MaxStackSize) { Stack = new KeyType[MaxSize]; top = -1; } پياده سازي KeyType* Stack<KeyType>::Pop() {if (!IsEmpty()) return (Stack[top--];} template <class KeyType> class Stack { public: Stack(int MaxStackSize=DefauktSize); Boolean IsFull(); void Push (const KeyType &item); Boolean IsEmpty(); KeyType* Pop(); private: int top; KeyType *stack; int MaxSize; } void Stack<KeyType>::Push(const KeyType &x) {if (!IsFull()) Stack[++top]=x; } Boolean Stack<KeyType>:: IsFull() { If ( top==MaxSize -1 ) return 1 else return o;} Boolean Stack <KeyType>:: IsEmpty() { if (top ==-1) return 1 else return 0; }

سوالات اگر top=0 باشد شرط خالي و پر بودن پشته چيست؟ چه تغييراتي در ترتيب دستورات Push و Pop بايستي ايجاد شود؟ به سوال 2 از تمرينات بخش 3-2 پاسخ دهيد؟

Instructor : VahidiPour صفQueue Instructor : VahidiPour

تعريف FIFO ( first in first out) ساختمان داده نيست بلكه نحوه استفاده از يك ساختمان داده است. يك آرايه نقش صف را بازي مي كند اگر : عناصر از انتهاي آن (rear) اضافه شده و از قسمت ابتداي آن (front) از ليست خارج شوند.

A C صف B مثال: سه عنصر A,B,Cدر صف قرار دارند front rear AddQ (A) AddQ (B) AddQ (C) DelQ (); front rear A C B

صف ADT template <class KeyType> class Queue { //Object: A finite ordered list with zero or more elements public: Queue(int MaxQueueSize=DefauktSize); Boolean IsFull(); void Add (const KeyType &item); Boolean IsEmpty(); KeyType* Delete(); }

Boolean Queue<KeyType>:: IsFull Queue <KeyType>::Queu(int MaxQueueSize):MaxSize(MaxQueueSize) { queue = new KeyType[MaxSize]; front = rear = -1; } پياده سازي KeyType* Queue<KeyType>::Delete {if (!IsEmpty()) return (queue[++front];} class Queue { public: Queue (int MaxQueueSize=DefaultSize); Boolean IsFull(); Boolean IsEmpty(); void Add (const KeyType &item); KeyType* Delete(); private: int front, rear; KeyType *queue; int MaxSize; } void Queue<KeyType>::Add(const KeyType &x) {if (!IsFull()) queue[++rear]=x; } Boolean Queue<KeyType>:: IsFull { If ( rear==MaxSize -1 ) return 1 else return o;} Boolean Queue <KeyType>:: IsEmpty { if (front ==rear) return 1 else return 0; }

سوالات اگر rear=front=0 باشد شرط خالي و پر بودن صف چيست؟ چه تغييراتي در ترتيب دستورات Add و Delete بايستي ايجاد شود؟ تعداد عناصر موجود در صف؟ چگونه مي توان از صف در زمانبندي برنامه ها استفاده نمود ؟(مثال 3-2)

بهبود پياده سازي روشي براي جلوگيري از اتلاف حافظه. انواع: 1. شيفت دادن تمام عناصر 2. شيفت در صورت نياز 3.صف حلقوي

روش اول - شيفت دادن تمام عناصر وقتي عنصر سر صف از ليست خارج شد تمامي عناصر يكي به طرف ابتداي صف شيفت داده مي شوند. فقط به يك اشاره گر((rear نياز داريم (front هميشه صفر است). فقط تابع Delete( ) تغيير مي كند A B C D front rear

روش اول - شيفت دادن تمام عناصر-ادامه KeyType* Queue<KeyType>:: Delete() { : for ( i=0 ; i<rear ; i++) Queue[i] = Queue[i+1] rear - - ; }

روش دوم- شيفت در صورت نياز ما زماني عناصر را شيفت مي دهيم كه صف پر شده باشد. فقط تابع addQ تغيير مي كند. 1 2 3 4 front rear rear A B C D F

روش دوم - شيفت در صورت نياز-ادامه برنامه اي بنويسيد كه اين روش را پياده سازي نمايد.

صف حلقوي آرايه اي به صورت دايره است كه اولين عنصر آن(با انديس (0 بلافاصله بعد از آخرين عنصر آرايه قرار دارد. 1 2 . . . n-1 1 2 . n-1 .

صف حلقوي-ادامه عناصر در جهت عقربه هاي ساعت به آرايه اضافه مي شوند. براي اضافه كردن اشاره گرهاي صف بايد از عملگر باقيمانده استفاده نمود شرط خالي و پر بودن صف چيست؟

صف حلقوي-ادامه front rear 1 2 3 4 5 front 1 2 3 4 5 rear C D 1 2 3 4 5 Add A B C Delete 1 2 3 4 5 front 1 2 3 4 5 rear C D 1 2 3 4 5 A B C rear front Boolean Queue <KeyType>:: IsEmpty { if (front ==rear) return 1 else return 0; } F

صف حلقوي-ادامه شرط خالي و پر بودن نمي تواند يكسان باشد. 1 D 5 2 C front 1 2 3 4 5 rear C Add D E F G H D شرط خالي و پر بودن نمي تواند يكسان باشد. front 1 2 3 4 5 rear C D E F G Boolean Queue<KeyType>:: IsFull { If ( (rear +1) % MaxSize == front ) return 1 else return o;} F

سوالات توابع Add و Delete را از صف حلقوي بنويسيد؟(بخش 3-3) اگر rear= 1 ,front=0 باشد شرط خالي و پر بودن صف حلقوي چيست؟ به سوال 3 از تمرينات بخش 3-3 پاسخ دهيد؟ برنامه نويسي: سوال 2 از بخش 3-4{ برنامه رانوشته و پرينت تحويل دهيد}

كاربردهاي صف 1. شبيه سازي 2. بافر صفحه كليد(با استفاده از صف حلقوي) 3. صف پيغام در Windows