스택(Stack) 김진수 kjsspace@daum.net.

Slides:



Advertisements
Similar presentations
스택 스택 추상자료형 스택 스택의 구현 스택의 응용 한빛미디어(주).
Advertisements

Vision System Lab, Sang-Hun Han
명품 C++ 프로그래밍 3장. 클래스와 객체.
명품 C++ 8장 상속.
명품 C++ 4장. 객체 포인터와 객체 배열, 객체의 동적 생성.
Power C++ 제6장 포인터와 문자열.
C++ Espresso 제3장 배열과 포인터.
C++ Espresso 제3장 배열과 포인터.
2장 닷넷 프레임워크.
C++ Espresso 제1장 기초 사항.
3 장 stack and queue.
Internet Computing KUT Youn-Hee Han
Chapter 10 – 추상 자료형 Outline 10.1 소개 10.2 Ada의 추상 자료형 10.3 C++의 추상 자료형
실전 프로젝트 2 : 숫자야구 숫자 야구를 구현해보자.
제6장 객체배열과 벡터 객체 배열을 이해한다. 벡터(vector) 클래스를 사용할 수 있다.
명품 C++ 13장 예외 처리와 C 언어와의 링크 지정.
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
자료구조 실습 (03분반)
5장. 리스트 리스트 학습목표 목록이나 도표처럼 여러 데이터를 관리할 수 있는 자료형을 추상화
C++ Exspresso 제5장 클래스의 기초.
8. 객체와 클래스 (기본).
Internet Computing KUT Youn-Hee Han
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Internet Computing KUT Youn-Hee Han
C++ Espresso 제9장 다형성.
4장 스택.
7 스택.
10장 템플릿과 표준 템플릿 라이브러리(STL)
배열, 포인터, 참조 배열은 같은 형을 가지는 변수들의 묶음이다..
명품 C++ 8장 상속.
스택(stack) SANGJI University Kwangman Ko
제15장 STL과 람다식 STL의 개념을 이해하고 사용할 수 있다. 람다식을 이해하고 사용할 수 있다.
C++ Espresso 제6장 생성자와 소멸자.
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 Slide 1 (of 27).
CHAP 6:큐 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
다음 주 과제 7장 읽어오기 숙제 해서 다음 주(11월 12일) 제출하기. 큐(Queue) E304호,
Chapter 9 – 구조형과 리스트 처리 Outline 9.1 자신 참조 구조형 9.2 선형 연결 리스트 9.3 리스트 연산
Chapter 06. 스택(Stack) Chapter 06-1: 스택의 이해와 ADT 정의.
명품 C++ 7장 프렌드와 연산자 중복.
18장. 헤더 파일과 구현 파일 01_ 헤더 파일과 구현 파일의 사용.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
Chapter 05. 클래스 완성. chapter 05. 클래스 완성 01. 복사 생성자 복사 생성(Copy Construction) 생성될 때 자신과 같은 타입의 객체를 변수로 받아, 이 객체와 같은 값을 갖는 새로운 객체를 생성하는 것 명시적인 생성 과정뿐만.
C ++ 프로그래밍 시작.
정적 멤버 변수/정적 멤버 함수 - friend 함수/클래스 template
C++ Espresso 제12장 템플릿.
C++ 프로그래밍 년 2학기 전자정보공학대학 컴퓨터공학부.
컴퓨터 개론 및 실습 Dept. Computer Eng. Hankuk University of Foreign Studies
제5장 생성자와 접근제어 객체 지향 기법을 이해한다. 클래스를 작성할 수 있다. 클래스에서 객체를 생성할 수 있다.
8 큐.
배열과 연결리스트 연결리스트 배열 메모리 할당이 연속적이어서 인덱스 사용시 검색이 빠르다.
4th HomeWork Guide (ver2.0)
Ch.1 Iterator Pattern <<interface>> Aggregate +iterator
타입, 연산자 Chapter 5, 6 Kum Deuk Kyu , Ph. D. Spring 2015
가상함수와 추상 클래스.
Chapter 1 C와는 다른 C++. 최호성.
제2장 제어구조와 배열 if-else 문에 대하여 학습한다. 중첩 if-else 문에 대하여 학습한다.
Chapter 04 리스트.
4. 고급변수 사용 : 포인터와 관련하여 메모리 바라보기
루프와 카운트 Looping and counting
멤버 함수인 operator+()가 실행, 또는 전역 함수인 operator+()가 실행 Point p3 = p1+p2; 에서
제8장 포인터와 동적객체 생성 포인터의 개념을 이해한다. 포인터와 관련된 연산을 이해한다.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
5. 논리적 자료표현 : 구조체.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
제 11장. 템플릿과 STL 학기 프로그래밍언어및실습 (C++).
03. 메모리 관리 C++ 프로그램에서 다룰 수 있는 메모리의 종류
포인터와 배열 조 병 규 한 국 교 통 대 학 교 SQ Lab..
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
10장 템플릿과 표준 템플릿 라이브러리(STL)
실습과제 1번 /* 1. 멤버 변수로 반경 radius를 갖고, 그 값을 모니터에 출력하는
Presentation transcript:

스택(Stack) 김진수 kjsspace@daum.net

스택 들어온 시간 순으로 데이터를 쌓아갈 때 가장 위에 즉, 가장 최근에 삽입된 위치에 있는 데이터를 삭제하거나 아니면 거기에 이어서 새로운 데이터를 삽입할 수 있도록 하는 추상 자료형 후입선출(後入先出) LIFO(Last-In, First-Out)

주요작업 Create: 새로운 스택을 만들기 Destroy: 사용되던 스택을 파기하기 Push: 스택 탑 바로 위에 새로운 데이터를 삽입하기 Pop: 스택 탑 데이터를 삭제하기 GetTop: 스택 탑 데이터를 검색하기 IsEmpty: 현재 스택이 비어있는지를 확인하기 IsFull: 현재 스택이 꽉 차 있는지를 확인하기 GetSize: 현재 스택에 들어가 있는 데이터의 개수를 알려주기

Stack (Array)

Stack(Linked List)

스택(배열이용) class StackArray }; { public: StackArray(void); StackArray(const StackArray & S); //복사생성자 ~StackArray(void); void Push(int Item); bool IsEmpty(void); bool IsFull(void); private: int Top; int Stack[100]; };

Top = S.Top; // Top 인덱스를 복사 StackArray::StackArray( )          // 생성자 함수      {  Top = 0;                             //탑 인덱스 0으로 초기화 } StackArray::StackArray(const stackClass& S)  // 복사생성자 { Top = S.Top;                          // Top 인덱스를 복사 for (int Index = 0; Index <= S.Top; ++ Index)  // 인덱스 0부터 S.Top까지      Stack[Index] = S.Stack[Index];    // 배열 요소 복사 StackArray::~StackArray( )            // 소멸자 함수 {                                        // 실행할 일 없음 bool StackArray::IsEmpty( )     // 빈 스택인지 확인하는 함수 return (Top = = 0);         // 탑 인덱스 0 이면 TRUE

bool StackArray::IsFull( ) // 꽉찬 스택인지 확인하는 함수 { return (Top = = 100);     // 탑 인덱스 100이면 TRUE } void StackArray:: Push(int Item) // Item 값을 스택에 삽입 Top=Top+1; Stack[Top]=Item; int StackArray:: Pop( ) return Stack[Top--]; }   

Stack Test #1 void main() #include<iostream> #include"StackArray.h" using namespace std; void main() { StackArray st; for(int i=1;i<=10;i++) st.Push(i); cout << st.Pop() << endl; }

Stack Test #2 void main() #include<iostream> #include"StackArray.h" using namespace std; void main() { StackArray st1; for(int i=1;i<=10;i++) st1.Push(i); StackArray st2(st1); cout << st2.Pop() << endl; }

스택(Linked List) class Node { public: Node(void); }; ~Node(void); int data; Node *next; };

#include "Node.h“ data = 0; } next = NULL; Node::Node(void){

class StackClass #include"Node.h" { public: StackClass(void); private: Node *head; void Push(int item); int Pop(void); bool isEmpty(void); bool isFull(void); };

#include "StackClass.h" #include <iostream> StackClass::StackClass(void){ head = new Node; } StackClass::~StackClass(void){ delete head; void StackClass::Push(int item){ Node *newNode = new Node; if(newNode!=NULL){ newNode->next = head; head->data = item; head = newNode;

int StackClass::Pop(void){ if(!isEmpty()){ Node *current = head->next; head = head->next; return current->data; } return 9999; bool StackClass::isEmpty(void){ return (head->next==NULL); bool StackClass::isFull(void){ return false;

Stack Test#3 int main() { StackClass *a = new StackClass; #include<iostream> #include"StackClass.h" using namespace std; int main() { StackClass *a = new StackClass; for(int i=1;i<=10;i++) a->Push(i); cout << a->Pop() << endl; delete a; return 0; }

Stack 사용예

“ 2 5 + 3 * 1 – “ 의 연산

후위표기법 계산 blog.daum.net/kjsspace