일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- oracle
- patch
- perl + 정규표현식
- memory
- Linux
- fdisk
- solaris network
- solaris
- perl one-liner
- sqlplus
- Oracle RAC
- prompt
- Unix
- grid
- cygwin
- perl string
- rac
- mariaDB
- command & perl
- php5
- bash
- SQL
- MySQL
- oracle install
- 오라클
- dba
- PERL
- 연산자
- Network
- RHEL4
Archives
- Today
- Total
DATA 전문가로 가는 길
[Perl] 자료구조 스택과 큐 (LIFO, FIFO) 본문
1. 스택
보시면 알겠지만 스택의 의미는 배열에 차례대로 입력 하게 됩니다. 즉 마지막 원소의 값에 push 하는 방식이라고 생각 하시면 됩니다.
스택과 다른 동작을 하는 부분을 찾으셨는지 모르겠습니다.
바로 이부분 인데요. Queue : five four three two one 최종적으로 배열에 쌓인 원소를 보면 5,4,3,2,1 형태로 들어간 것을 확인 할 수 있습니다. 바로 이부분이 큐의 정의라고 볼 수 있습니다.
1~5까지 원소를 받아서 더한 값을 보내주시는 아주 착한 shift입니다.
perldoc -f shift
perldoc -f unshif
perldoc -f pop
perldoc -f push
http://docstore.mik.ua/orelly/perl/advprog/index.htm
와 정말 좋은 내용 많은.. ㅎㄷㄷ
================================================================================
http://docstore.mik.ua/orelly/perl/advprog/index.htm (APPerl)
http://doc.perl.kr/twiki/bin/view/Wiki/HowToStartPerl (펄덕펄덕)
http://cafe.naver.com/perlstudy.cafe (대한민국Perl커뮤니티)
================================================================================
- 리스트의 한쪽 끝에서 수행 되는 선형 리스트 한가지 형태로서 스택의 작업에는 삽입(push), 삭제(pop)
- LIFO(Last In Frist Out) 스택에 마지막으로 입력된 자료가 제일 먼저 삭제 하는 방식
#!/usr/bin/perl use strict; use warnings; my @stack; my @data = ('one','two','three','four','five'); foreach my $str ( @data ) { print "Initial Stack : $str \n"; push (@stack, $str); print "Add item to Queue : @stack \n"; } print "---------------------------------------\n"; print "Stack : @stack \n"; print "---------------------------------------\n"; my $count = @stack; foreach ( 1..$count ) { my $pop_stack = pop @stack; print "Popping to stack : $pop_stack \n"; print "Remove item to Stack : @stack \n"; } print "---------------------------------------\n"; print "Stack : @stack \n"; print "---------------------------------------\n"; 결과 : --------------------------------------- Initial Stack : one Add item to Queue : one Initial Stack : two Add item to Queue : one two Initial Stack : three Add item to Queue : one two three Initial Stack : four Add item to Queue : one two three four Initial Stack : five Add item to Queue : one two three four five --------------------------------------- Stack : one two three four five --------------------------------------- Popping to stack : five Remove item to Stack : one two three four Popping to stack : four Remove item to Stack : one two three Popping to stack : three Remove item to Stack : one two Popping to stack : two Remove item to Stack : one Popping to stack : one Remove item to Stack : --------------------------------------- Stack : --------------------------------------- |
- push (@stack, $str);
밀어 넣다. 말그대로 입니다. 배열에 있는 원소에 그냥 밀어 넣는 거죠. 그렇게 되면 배열에는 차례대로 값이 입력 되게 됩니다. 1,2,3,4,5 와 같이 말입니다. - my $pop_stack = pop @stack;
popping 제가 한때 아주 좋아하던 춤..이였던.. pop은 빠져나오는 값을 의미 하기도 합니다. 배열에 있는 값을 하나하나 빼기 위해서 사용 하는 함수 입니다. 방법은 LIFO와 같이 마지막에 입력된 값이 먼저 빠지게 됩니다.
- 큐는 여려개의 데이터 항목을 일정한 순서대로 나열 하는 형태로 push(입력), pop(삭제) 작동
- FIFO(Frist In Frist OUT) 선입선출 방법으로 가장 먼저 데이터에 대해서 삭제 하는 방법
#!/usr/bin/perl use strict; use warnings; my @queue; my @data = ('one','two','three','four','five'); foreach my $str ( @data ) { print " Initial Stack : $str \n"; unshift (@queue, $str); print "Add item to Queue : @queue \n"; } print "---------------------------------------\n"; print "Queue : @queue \n"; print "---------------------------------------\n"; my $count = @queue; foreach (1..$count) { my $pop_queue = pop @queue; print "Popping to queue : $pop_queue \n"; print "Remove item to Queue : @queue \n"; } print "---------------------------------------\n"; print "Queue : @queue \n"; print "---------------------------------------\n"; 결과 : --------------------------------------- Initial Stack : one Add item to Queue : one Initial Stack : two Add item to Queue : two one Initial Stack : three Add item to Queue : three two one Initial Stack : four Add item to Queue : four three two one Initial Stack : five Add item to Queue : five four three two one --------------------------------------- Queue : five four three two one --------------------------------------- Popping to queue : one Remove item to Queue : five four three two Popping to queue : two Remove item to Queue : five four three Popping to queue : three Remove item to Queue : five four Popping to queue : four Remove item to Queue : five Popping to queue : five Remove item to Queue : --------------------------------------- Queue : --------------------------------------- |
바로 이부분 인데요. Queue : five four three two one 최종적으로 배열에 쌓인 원소를 보면 5,4,3,2,1 형태로 들어간 것을 확인 할 수 있습니다. 바로 이부분이 큐의 정의라고 볼 수 있습니다.
- unshift (@queue, $str);
unshift함수를 이용하여 배열의 첫번째 요소에 삽입하는 방식입니다. 위에 결과를 보시면 값이 추가적으로 뒤로 밀리는 현상을 보실수 있습니다. - my $pop_queue = pop @queue;
이부분은 스택과 같은 동작을 합니다. 하지만 데이터 들은 다소 다른데요. 그이유는 앞서 말씀 드린것 처럼 배열에 들어있는 원소들의 위치가 스택과는 차이점을 가지고 있습니다.
오늘 카페에 어떤분이 파스칼 문법을 가지고 perl로 구성하는 방식을 물어 보셨고 작성자인 나도 굉장히 궁금해서 컴퓨터 포멧과 동시에 문서를 작성했습니다.
C언어로 했을때와 좀 다른건 어떤 방식을 부여하는 Stack, Queue가 아닌 perl은 배열을 가지고 논?다는 생각이 들었습니다.
그외 shift() 함수도 있는데요.
#!/usr/bin/perl use strict; use warnings; print "SUM : ". sub_num( 12345 ) ." \n"; sub sub_num { my $sum; map {$sum += $_} split //, shift ; return $sum; } 결과 : SUM : 15 |
perldoc -f shift
perldoc -f unshif
perldoc -f pop
perldoc -f push
http://docstore.mik.ua/orelly/perl/advprog/index.htm
와 정말 좋은 내용 많은.. ㅎㄷㄷ
================================================================================
http://docstore.mik.ua/orelly/perl/advprog/index.htm (APPerl)
http://doc.perl.kr/twiki/bin/view/Wiki/HowToStartPerl (펄덕펄덕)
http://cafe.naver.com/perlstudy.cafe (대한민국Perl커뮤니티)
================================================================================
'Programming > Perl' 카테고리의 다른 글
[Perl] Net::FTP를 활용한 시스템 체크 (0) | 2009.05.14 |
---|---|
[Perl] 정규표현식 (0) | 2009.04.24 |
[Perl] 특정 문자를 찾아서 라인 출력 (0) | 2009.04.11 |
[Perl] Perl Command-Line Options (2) | 2009.04.09 |
[Perl] 서브루틴 (0) | 2009.04.07 |
Comments