데이터 구조 또는 초록 데이터 유형
(ADT)는 그 자체로 수행 할 수 있고 해당 작업의 영향에 대한 제약에 의해 제한되는 작업 모음에 의해 정의 된 모델입니다. 그것은 기본 데이터에 수행 할 수있는 일과 수행 방법 사이에 벽을 만듭니다.
우리 대부분은 정상적인 일상적인 사용으로 스택과 큐에 익숙하지만 슈퍼마켓 대기열과 자동 판매기는 데이터 구조와 어떤 관련이 있습니까? 알아 봅시다. 이 기사에서는 일상적인 사용에서 시작된 두 가지 기본 추상 데이터 유형 인 스택 및 큐를 소개합니다.
스택
일반적으로 스택은 일반적으로 레이어로 배열되는 물체 더미 (예 : 책상에 책 더미 또는 학교 식당의 트레이 스택입니다. 컴퓨터 과학 용어에서 스택은 특정 속성을 가진 순차적 인 컬렉션입니다. 그 점에서 스택에 마지막으로 배치 된 객체는 첫 번째 객체가 제거됩니다. 이 속성은 일반적으로
마지막으로 또는 lifo라고합니다. 사탕, 칩 및 담배 자동 판매기도 같은 원칙으로 작동합니다. 랙에로드 된 마지막 항목은 먼저 분배됩니다.
추상적 인 용어로, 스택은 ( "푸시")에 추가 된 모든 항목의 선형 목록이며 ( "팝") 목록이 한쪽 끝으로 제한됩니다. ). 스택을 정의하는 기본 작업은 다음과 같습니다.
스택이 첫 번째로 마지막으로 작동하는 것을 볼 수 있습니다. 스택에 마지막으로 추가 된 것은 가장 먼저 제거됩니다. 스택이 비어있을 때까지 계속 팝 아이템을 사용하면 스택 언더 플로우 런타임 예외가 발생합니다.
오, 안녕하세요… PHP는 프로그램 실행 호출 스택을 예외 및 예외까지 보여주는 스택 추적을 친절하게 제공했습니다!
<span><span><?php
</span></span><span><span>class ReadingList
</span></span><span><span>{
</span></span><span> <span>protected $stack;
</span></span><span> <span>protected $limit;
</span></span><span>
</span><span> <span>public function __construct($limit = 10) {
</span></span><span> <span>// initialize the stack
</span></span><span> <span>$this->stack = array();
</span></span><span> <span>// stack can only contain this many items
</span></span><span> <span>$this->limit = $limit;
</span></span><span> <span>}
</span></span><span>
</span><span> <span>public function push($item) {
</span></span><span> <span>// trap for stack overflow
</span></span><span> <span>if (count($this->stack) < $this->limit) {
</span></span><span> <span>// prepend item to the start of the array
</span></span><span> <span>array_unshift($this->stack, $item);
</span></span><span> <span>} else {
</span></span><span> <span>throw new RunTimeException('Stack is full!');
</span></span><span> <span>}
</span></span><span> <span>}
</span></span><span>
</span><span> <span>public function pop() {
</span></span><span> <span>if ($this->isEmpty()) {
</span></span><span> <span>// trap for stack underflow
</span></span><span> <span>throw new RunTimeException('Stack is empty!');
</span></span><span> <span>} else {
</span></span><span> <span>// pop item from the start of the array
</span></span><span> <span>return array_shift($this->stack);
</span></span><span> <span>}
</span></span><span> <span>}
</span></span><span>
</span><span> <span>public function top() {
</span></span><span> <span>return current($this->stack);
</span></span><span> <span>}
</span></span><span>
</span><span> <span>public function isEmpty() {
</span></span><span> <span>return empty($this->stack);
</span></span><span> <span>}
</span></span><span><span>}</span></span>
<span><span><?php
</span></span><span><span>$myBooks = new ReadingList();
</span></span><span>
</span><span><span>$myBooks->push('A Dream of Spring');
</span></span><span><span>$myBooks->push('The Winds of Winter');
</span></span><span><span>$myBooks->push('A Dance with Dragons');
</span></span><span><span>$myBooks->push('A Feast for Crows');
</span></span><span><span>$myBooks->push('A Storm of Swords');
</span></span><span><span>$myBooks->push('A Clash of Kings');
</span></span><span><span>$myBooks->push('A Game of Thrones');</span></span>
이중 연결 목록에 각 노드에는 두 개의 포인터가 있으며, 각 노드에는 컬렉션의 다음 및 이전 노드를 가리 킵니다. 이러한 유형의 데이터 구조는 양방향으로 이동할 수 있습니다.
크로스 (x)로 표시된 노드는 널 또는 센티넬 노드를 나타냅니다.이 노드는 트래버스 경로의 끝을 지정합니다 (즉, 경로 터미네이터).
ReadingList는 splstack으로 구현되므로 스택을 앞으로 (하향식) 및 뒤로 (하향)로 이동할 수 있습니다. Splstack의 기본 트래버스 모드는 Lifo입니다.
스택을 역순으로 통과하려면 반복기 모드를 FIFO로 설정합니다 (첫 번째, 우선).
<span><span><?php
</span></span><span><span>class ReadingList
</span></span><span><span>{
</span></span><span> <span>protected $stack;
</span></span><span> <span>protected $limit;
</span></span><span>
</span><span> <span>public function __construct($limit = 10) {
</span></span><span> <span>// initialize the stack
</span></span><span> <span>$this->stack = array();
</span></span><span> <span>// stack can only contain this many items
</span></span><span> <span>$this->limit = $limit;
</span></span><span> <span>}
</span></span><span>
</span><span> <span>public function push($item) {
</span></span><span> <span>// trap for stack overflow
</span></span><span> <span>if (count($this->stack) < $this->limit) {
</span></span><span> <span>// prepend item to the start of the array
</span></span><span> <span>array_unshift($this->stack, $item);
</span></span><span> <span>} else {
</span></span><span> <span>throw new RunTimeException('Stack is full!');
</span></span><span> <span>}
</span></span><span> <span>}
</span></span><span>
</span><span> <span>public function pop() {
</span></span><span> <span>if ($this->isEmpty()) {
</span></span><span> <span>// trap for stack underflow
</span></span><span> <span>throw new RunTimeException('Stack is empty!');
</span></span><span> <span>} else {
</span></span><span> <span>// pop item from the start of the array
</span></span><span> <span>return array_shift($this->stack);
</span></span><span> <span>}
</span></span><span> <span>}
</span></span><span>
</span><span> <span>public function top() {
</span></span><span> <span>return current($this->stack);
</span></span><span> <span>}
</span></span><span>
</span><span> <span>public function isEmpty() {
</span></span><span> <span>return empty($this->stack);
</span></span><span> <span>}
</span></span><span><span>}</span></span>
대기열 <span><span><?php
</span></span><span><span>$myBooks = new ReadingList();
</span></span><span>
</span><span><span>$myBooks->push('A Dream of Spring');
</span></span><span><span>$myBooks->push('The Winds of Winter');
</span></span><span><span>$myBooks->push('A Dance with Dragons');
</span></span><span><span>$myBooks->push('A Feast for Crows');
</span></span><span><span>$myBooks->push('A Storm of Swords');
</span></span><span><span>$myBooks->push('A Clash of Kings');
</span></span><span><span>$myBooks->push('A Game of Thrones');</span></span>
슈퍼마켓 결제에서 한 번 라인을 본 적이 있다면 첫 번째 사람이 먼저 제공되는 것을 알게 될 것입니다. 컴퓨터 용어에서 큐는 또 다른 추상 데이터 유형이며, 먼저 에서 첫 번째
기준 또는 FIFO에서 작동합니다. 인벤토리는 특히 이러한 품목이 부패하기 쉬운 성격 인 경우 FIFO 기준으로 관리됩니다.
대기열을 정의하는 기본 작업은 다음과 같습니다.
<span><span><?php
</span></span><span><span>class ReadingList
</span></span><span><span>{
</span></span><span> <span>protected $stack;
</span></span><span> <span>protected $limit;
</span></span><span>
</span><span> <span>public function __construct($limit = 10) {
</span></span><span> <span>// initialize the stack
</span></span><span> <span>$this->stack = array();
</span></span><span> <span>// stack can only contain this many items
</span></span><span> <span>$this->limit = $limit;
</span></span><span> <span>}
</span></span><span>
</span><span> <span>public function push($item) {
</span></span><span> <span>// trap for stack overflow
</span></span><span> <span>if (count($this->stack) < $this->limit) {
</span></span><span> <span>// prepend item to the start of the array
</span></span><span> <span>array_unshift($this->stack, $item);
</span></span><span> <span>} else {
</span></span><span> <span>throw new RunTimeException('Stack is full!');
</span></span><span> <span>}
</span></span><span> <span>}
</span></span><span>
</span><span> <span>public function pop() {
</span></span><span> <span>if ($this->isEmpty()) {
</span></span><span> <span>// trap for stack underflow
</span></span><span> <span>throw new RunTimeException('Stack is empty!');
</span></span><span> <span>} else {
</span></span><span> <span>// pop item from the start of the array
</span></span><span> <span>return array_shift($this->stack);
</span></span><span> <span>}
</span></span><span> <span>}
</span></span><span>
</span><span> <span>public function top() {
</span></span><span> <span>return current($this->stack);
</span></span><span> <span>}
</span></span><span>
</span><span> <span>public function isEmpty() {
</span></span><span> <span>return empty($this->stack);
</span></span><span> <span>}
</span></span><span><span>}</span></span>
spldoublylinkedlist
또한 ArrayAccess 인터페이스를 구현하므로 배열 요소로 Splqueue 및 Splstack에 항목을 추가 할 수도 있습니다.
<span><span><?php
</span></span><span><span>$myBooks = new ReadingList();
</span></span><span>
</span><span><span>$myBooks->push('A Dream of Spring');
</span></span><span><span>$myBooks->push('The Winds of Winter');
</span></span><span><span>$myBooks->push('A Dance with Dragons');
</span></span><span><span>$myBooks->push('A Feast for Crows');
</span></span><span><span>$myBooks->push('A Storm of Swords');
</span></span><span><span>$myBooks->push('A Clash of Kings');
</span></span><span><span>$myBooks->push('A Game of Thrones');</span></span>
대기열 앞에서 항목을 제거하려면 :
<span><span><?php
</span></span><span><span>echo $myBooks->pop(); // outputs 'A Game of Thrones'
</span></span><span><span>echo $myBooks->pop(); // outputs 'A Clash of Kings'
</span></span><span><span>echo $myBooks->pop(); // outputs 'A Storm of Swords'</span></span>
enqueue ()는 push ()에 대한 별칭이지만 dequeue ()는 pop ()의 별칭이 아닙니다. POP ()는 대기열의 맥락에서 다른 의미와 기능을 갖습니다. 여기에서 POP ()를 사용했다면 FIFO 규칙을 위반하는 대기열의 끝 (꼬리)에서 항목을 제거합니다.
마찬가지로, 대기열의 전면 (헤드)에 무엇이 있는지 확인하려면 top () 대신 맨 아래 ()를 사용해야합니다.
<span><span><?php
</span></span><span><span>echo $myBooks->top(); // outputs 'A Feast for Crows'</span></span>
요약
이 기사에서는 스택 및 대기열 초록 데이터 유형이 프로그래밍에 어떻게 사용되는지 보았습니다. 이러한 데이터 구조는 추상적이며, 그 자체로 수행 할 수있는 작업에 의해 정의되어 구현과 기본 데이터 사이에 벽을 만듭니다.
이러한 구조는 또한 이러한 작업의 효과에 의해 제한됩니다. 스택 상단에서 항목을 추가하거나 제거 할 수 있으며 큐 전면에서 항목을 제거하거나 큐의 후면에 항목을 추가 할 수 있습니다.
Flickr를 통해 Alexandre Dulaunoy의 이미지
PHP는 배열, 객체 및 리소스를 포함한 여러 유형의 데이터 구조를 지원합니다. 배열은 PHP에서 가장 일반적이고 다재다능한 데이터 구조입니다. 다른 배열을 포함하여 모든 유형의 데이터를 보유 할 수 있으며 색인 또는 연관성이있을 수 있습니다. PHP의 객체는 속성과 방법을 가질 수있는 클래스의 인스턴스입니다. 리소스는 데이터베이스 연결과 같은 외부 리소스에 대한 참조를 보유한 특수 변수입니다. PHP에서 스택을 구현하려면 어떻게해야합니까? 스택은 LIFO를 따르는 데이터 구조의 유형입니다 ( 마지막으로, 먼저) 원칙. PHP에서는 Splstack 클래스를 사용하여 스택을 구현할 수 있습니다. push () 메소드를 사용하여 스택에 요소를 푸시하고 pop () 메소드를 사용하여 스택에서 팝 요소를 푸시 할 수 있습니다. PHP의 어레이와 객체의 차이점은 무엇입니까?
. PHP의 배열과 객체는 두 가지 유형의 데이터 구조이지만 몇 가지 주요 차이점이 있습니다. 배열은 간단한 값 목록이며 객체는 클래스의 인스턴스이며 속성과 방법을 가질 수 있습니다. 배열은 색인화되거나 연관성이있을 수 있지만 객체는 항상 문자열 키를 사용합니다. 배열은 다재다능하고 사용하기 쉽고 물체는 더 많은 구조와 캡슐화를 제공합니다.
위 내용은 PHP 마스터 | PHP 개발자의 데이터 구조 : 스택 및 대기열의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!