SlideShare a Scribd company logo
1 of 17
Download to read offline
CHIP 2학년 수업
연결리스트 복습 및 스택
2018년 1학기 4주차
목차
1. 연결 리스트 복습
2. 스택의 개념
3. 스택 기본 연산
4. 실습
연결 리스트 복습
실습 1
• 먼저 연결 리스트의 기본 연산들부터 작성해보자.
• 10, 6, 8, 1, 4, 9, 5, 3, 2, 7 순으로 연결리스트에 수를 넣어보자.
• 이를 오름차순으로 정렬시켜보자.
스택의 개념
스택(Stack)이란?
• 자료가 위로 쌓이고, 맨 위에서부터 뺄 수 있다는 개념을 적용
• 즉, 자료의 삽입(push)와 삭제(pop)이 가장 위(top)에서만 됨.
• LIFO 구조 : Last-In-First-Out
• 사용할 수 있는 문제 : 함수호출, 순환함수, 미로 찾기 등
Stack?
typedef int element;
typedef element stack[MAX];
int top = -1;
data
data
data
data Top
스택의 기본연산
is_full : 스택 포화 상태
int is_full ( ){
if (top == MAX)
return 1;
else
return 0;
}
data
data
data
data
Top
0
1
2
3
4 data
is_empty : 스택 공백 상태
int is_empty ( ){
if (top == -1)
return 1;
else
return 0;
}
Top
0
1
2
3
4
-1
push : 스택에 데이터 삽입
void push (element data){
if (is_full()) {
printf(“stack is full!n”);
exit(0);
}
else stack[++top] = data;
} data
data
data
data
Topdata
0
1
2
3
4
push
pop : 스택에서 데이터를 꺼냄
element push ( ){
if (is_empty()) {
printf(“stack is empty!n”);
exit(0);
}
else
return stack[top--];
}
data
0
1
2
3
4
-1
data
data
data Top
pop
실습
실습2 : 괄호 검사 문제
• 괄호의 종류는 3가지가 있다.
• 대괄호 : [ , ]
• 중괄호 : { , }
• 소괄호 : ( , )
• 다음과 같이 괄호가 잘 닫혔는지 검사를 하는 문제다.
• (a(b) : not match
• a{b(c[d]e}f) : not match
• {a[bc](e(fg))} : match
(
if( ( i==0 ) && (j==0 )
(
(
(
(
( (
비교
(
(
비교
(
Not match
{
{ A [ (i+1 ) ]=0; }
{
[
{ {
[
비교
[
(
{
[
(
비교
{
비교 match
괄호 검사 예시
1. 이러한 알고리즘을 가진 괄호 검사 소스코드를 작성해보아라.
2. 입력, 출력 예시
• 즉, 괄호가 제대로 닫혔으면 match, 아니면 not match라는 문자열이
출력되게 해야한다.
• 문자열 한줄 입력받을 때 gets() 함수를 사용하자.
if ( ( i == 0 ) && [ j == 0 ] not match
입력 출력
4. 아래의 테스트 케이스가 잘 돌아가는지 확인
1) for (temp = arBase; instrBuf[n].value1 != stack[temp + 3]; temp = stack[temp]) {
2) if (!isspace(lineBuffer[0]))
3) if (visit[nextY][nextX] == INIT || visit[nextY][nextX] > visit[cur.y][cur.x] + 1)
4) BufferedReader br = new BufferedReader(new InputStreamReader(System.in))

More Related Content

Similar to 연결리스트 복습 및 스택

2015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌32015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌3ssuseraf62e91
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율S.O.P.T - Shout Our Passion Together
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl승혁 조
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서KimChangHoen
 

Similar to 연결리스트 복습 및 스택 (6)

2015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌32015 Kitel C 언어 강좌3
2015 Kitel C 언어 강좌3
 
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
[SOPT] 데이터 구조 및 알고리즘 스터디 - #03 : 정렬 (기본, 효율, 초효율
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
 
자료구조2보고서
자료구조2보고서자료구조2보고서
자료구조2보고서
 
Haskell study 4
Haskell study 4Haskell study 4
Haskell study 4
 
자료구조02
자료구조02자료구조02
자료구조02
 

More from Lee Geonhee

Python을 이용한 패키지 테스트 및 배포해보기
Python을 이용한 패키지 테스트 및 배포해보기Python을 이용한 패키지 테스트 및 배포해보기
Python을 이용한 패키지 테스트 및 배포해보기Lee Geonhee
 
자료구조 복습 및 트리기초
자료구조 복습 및 트리기초자료구조 복습 및 트리기초
자료구조 복습 및 트리기초Lee Geonhee
 
연결 리스트(기초)
연결 리스트(기초)연결 리스트(기초)
연결 리스트(기초)Lee Geonhee
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들Lee Geonhee
 
HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션Lee Geonhee
 
AES 알고리즘
AES 알고리즘AES 알고리즘
AES 알고리즘Lee Geonhee
 
허프만 압축 알고리즘 및 비교
허프만 압축 알고리즘 및 비교허프만 압축 알고리즘 및 비교
허프만 압축 알고리즘 및 비교Lee Geonhee
 
Shortest path algorithms
Shortest path algorithmsShortest path algorithms
Shortest path algorithmsLee Geonhee
 
5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)
5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)
5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)Lee Geonhee
 
오픈소스 라이선스
오픈소스 라이선스오픈소스 라이선스
오픈소스 라이선스Lee Geonhee
 
GitHub로 프로젝트 운영하기
GitHub로 프로젝트 운영하기GitHub로 프로젝트 운영하기
GitHub로 프로젝트 운영하기Lee Geonhee
 

More from Lee Geonhee (12)

Python을 이용한 패키지 테스트 및 배포해보기
Python을 이용한 패키지 테스트 및 배포해보기Python을 이용한 패키지 테스트 및 배포해보기
Python을 이용한 패키지 테스트 및 배포해보기
 
자료구조 복습 및 트리기초
자료구조 복습 및 트리기초자료구조 복습 및 트리기초
자료구조 복습 및 트리기초
 
연결 리스트(기초)
연결 리스트(기초)연결 리스트(기초)
연결 리스트(기초)
 
프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들프로젝트 관리 및 지켜야 할 사항들
프로젝트 관리 및 지켜야 할 사항들
 
HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션HTTPS를 이용한 챗봇 웹 어플리케이션
HTTPS를 이용한 챗봇 웹 어플리케이션
 
AES 알고리즘
AES 알고리즘AES 알고리즘
AES 알고리즘
 
허프만 압축 알고리즘 및 비교
허프만 압축 알고리즘 및 비교허프만 압축 알고리즘 및 비교
허프만 압축 알고리즘 및 비교
 
Shortest path algorithms
Shortest path algorithmsShortest path algorithms
Shortest path algorithms
 
5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)
5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)
5th Naver D2 FEST 결승전 발표 자료(IoT-Pet-Home-System)
 
오픈소스 라이선스
오픈소스 라이선스오픈소스 라이선스
오픈소스 라이선스
 
Web server
Web serverWeb server
Web server
 
GitHub로 프로젝트 운영하기
GitHub로 프로젝트 운영하기GitHub로 프로젝트 운영하기
GitHub로 프로젝트 운영하기
 

연결리스트 복습 및 스택

  • 1. CHIP 2학년 수업 연결리스트 복습 및 스택 2018년 1학기 4주차
  • 2. 목차 1. 연결 리스트 복습 2. 스택의 개념 3. 스택 기본 연산 4. 실습
  • 4. 실습 1 • 먼저 연결 리스트의 기본 연산들부터 작성해보자. • 10, 6, 8, 1, 4, 9, 5, 3, 2, 7 순으로 연결리스트에 수를 넣어보자. • 이를 오름차순으로 정렬시켜보자.
  • 6. 스택(Stack)이란? • 자료가 위로 쌓이고, 맨 위에서부터 뺄 수 있다는 개념을 적용 • 즉, 자료의 삽입(push)와 삭제(pop)이 가장 위(top)에서만 됨. • LIFO 구조 : Last-In-First-Out • 사용할 수 있는 문제 : 함수호출, 순환함수, 미로 찾기 등
  • 7. Stack? typedef int element; typedef element stack[MAX]; int top = -1; data data data data Top
  • 9. is_full : 스택 포화 상태 int is_full ( ){ if (top == MAX) return 1; else return 0; } data data data data Top 0 1 2 3 4 data
  • 10. is_empty : 스택 공백 상태 int is_empty ( ){ if (top == -1) return 1; else return 0; } Top 0 1 2 3 4 -1
  • 11. push : 스택에 데이터 삽입 void push (element data){ if (is_full()) { printf(“stack is full!n”); exit(0); } else stack[++top] = data; } data data data data Topdata 0 1 2 3 4 push
  • 12. pop : 스택에서 데이터를 꺼냄 element push ( ){ if (is_empty()) { printf(“stack is empty!n”); exit(0); } else return stack[top--]; } data 0 1 2 3 4 -1 data data data Top pop
  • 14. 실습2 : 괄호 검사 문제 • 괄호의 종류는 3가지가 있다. • 대괄호 : [ , ] • 중괄호 : { , } • 소괄호 : ( , ) • 다음과 같이 괄호가 잘 닫혔는지 검사를 하는 문제다. • (a(b) : not match • a{b(c[d]e}f) : not match • {a[bc](e(fg))} : match
  • 15. ( if( ( i==0 ) && (j==0 ) ( ( ( ( ( ( 비교 ( ( 비교 ( Not match { { A [ (i+1 ) ]=0; } { [ { { [ 비교 [ ( { [ ( 비교 { 비교 match 괄호 검사 예시
  • 16. 1. 이러한 알고리즘을 가진 괄호 검사 소스코드를 작성해보아라. 2. 입력, 출력 예시 • 즉, 괄호가 제대로 닫혔으면 match, 아니면 not match라는 문자열이 출력되게 해야한다. • 문자열 한줄 입력받을 때 gets() 함수를 사용하자. if ( ( i == 0 ) && [ j == 0 ] not match 입력 출력
  • 17. 4. 아래의 테스트 케이스가 잘 돌아가는지 확인 1) for (temp = arBase; instrBuf[n].value1 != stack[temp + 3]; temp = stack[temp]) { 2) if (!isspace(lineBuffer[0])) 3) if (visit[nextY][nextX] == INIT || visit[nextY][nextX] > visit[cur.y][cur.x] + 1) 4) BufferedReader br = new BufferedReader(new InputStreamReader(System.in))