데이터 구조 또는 초록 데이터 유형
(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) 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><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>
이중 연결 목록에 각 노드에는 두 개의 포인터가 있으며, 각 노드에는 컬렉션의 다음 및 이전 노드를 가리 킵니다. 이러한 유형의 데이터 구조는 양방향으로 이동할 수 있습니다.
크로스 (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) 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><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>
슈퍼마켓 결제에서 한 번 라인을 본 적이 있다면 첫 번째 사람이 먼저 제공되는 것을 알게 될 것입니다. 컴퓨터 용어에서 큐는 또 다른 추상 데이터 유형이며, 먼저 에서 첫 번째
기준 또는 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) 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>
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><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></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></span>
요약
이 기사에서는 스택 및 대기열 초록 데이터 유형이 프로그래밍에 어떻게 사용되는지 보았습니다. 이러한 데이터 구조는 추상적이며, 그 자체로 수행 할 수있는 작업에 의해 정의되어 구현과 기본 데이터 사이에 벽을 만듭니다.
이러한 구조는 또한 이러한 작업의 효과에 의해 제한됩니다. 스택 상단에서 항목을 추가하거나 제거 할 수 있으며 큐 전면에서 항목을 제거하거나 큐의 후면에 항목을 추가 할 수 있습니다.
Flickr를 통해 Alexandre Dulaunoy의 이미지
PHP는 배열, 객체 및 리소스를 포함한 여러 유형의 데이터 구조를 지원합니다. 배열은 PHP에서 가장 일반적이고 다재다능한 데이터 구조입니다. 다른 배열을 포함하여 모든 유형의 데이터를 보유 할 수 있으며 색인 또는 연관성이있을 수 있습니다. PHP의 객체는 속성과 방법을 가질 수있는 클래스의 인스턴스입니다. 리소스는 데이터베이스 연결과 같은 외부 리소스에 대한 참조를 보유한 특수 변수입니다. PHP에서 스택을 구현하려면 어떻게해야합니까? 스택은 LIFO를 따르는 데이터 구조의 유형입니다 ( 마지막으로, 먼저) 원칙. PHP에서는 Splstack 클래스를 사용하여 스택을 구현할 수 있습니다. push () 메소드를 사용하여 스택에 요소를 푸시하고 pop () 메소드를 사용하여 스택에서 팝 요소를 푸시 할 수 있습니다. PHP의 어레이와 객체의 차이점은 무엇입니까?
. PHP의 배열과 객체는 두 가지 유형의 데이터 구조이지만 몇 가지 주요 차이점이 있습니다. 배열은 간단한 값 목록이며 객체는 클래스의 인스턴스이며 속성과 방법을 가질 수 있습니다. 배열은 색인화되거나 연관성이있을 수 있지만 객체는 항상 문자열 키를 사용합니다. 배열은 다재다능하고 사용하기 쉽고 물체는 더 많은 구조와 캡슐화를 제공합니다.
위 내용은 PHP 마스터 | PHP 개발자의 데이터 구조 : 스택 및 대기열의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> 'Hello World', 'github.com'=> [ 'foo'=> 'bar'], 'forge.laravel.com'=>

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

PHP 로깅은 웹 애플리케이션을 모니터링하고 디버깅하고 중요한 이벤트, 오류 및 런타임 동작을 캡처하는 데 필수적입니다. 시스템 성능에 대한 귀중한 통찰력을 제공하고 문제를 식별하며 더 빠른 문제 해결을 지원합니다.

Laravel의 서비스 컨테이너 및 서비스 제공 업체는 아키텍처의 기본입니다. 이 기사는 서비스 컨테이너, 세부 정보 서비스 제공 업체 생성, 등록 및 예제와 함께 실질적인 사용을 보여줍니다. 우리는 ove로 시작합니다

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

Dreamweaver Mac版
시각적 웹 개발 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

mPDF
mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.
