대기줄
스택과 마찬가지로 대기열은 목록의 전문화입니다. 이는 FIFO 기반(선입선출)을 기반으로 합니다. 즉, 선입선출이 먼저임을 의미합니다. 즉, 대기열에서 "가장 나이가 많은" 사람이 먼저 떠나는 것이며, 더 나은 이해를 위해 은행 대기열을 고려해보세요.
⚠️
큐 애플리케이션: 운영 체제의 프로세스 관리; 동시 프로그래밍의 작업 간 통신 컴퓨터 네트워크(인쇄); 웹 서버의 요청에 대한 응답
큐 자체는 끝 부분에서만 데이터를 직접 조작할 수 있습니다.
public interface Queue<e> { void enqueue(E value); //enfileira E dequeue(); //remove e desenfileira E first(); //retorna primeiro elemento int size(); //algumas literaturas se chama lenght() boolean isEmpty(); } </e>
우선순위 대기열
일반적인 일상 대기열의 행동과 유사하지만 이제 은행에서 줄을 서고 여성이 대기열에 들어간다고 생각해보세요. 나이가 많을수록 우선순위가 더 높기 때문에 모두가 그녀를 먼저 놔줍니다.
우선순위 큐 데이터 구조에서 각 노드는 키-값을 가지며, 키는 우선순위를 저장하는 키, 값은 노드의 값입니다. Java 기본적으로 키는 처음에는 숫자이며 나중에 프로그래머가 변경할 수 있습니다.
Key와 Value의 집합을 Entry라고 하여 이 E.D의 인터페이스가 변경됩니다. 기타 세부 사항은 다음과 같습니다. 키를 정의한 후에는 변경할 수 없습니다. 두 노드가 키에 동일한 우선순위 값을 갖는 경우 프로그래머는 규칙을 선택합니다.
public interface PriorityQueueOg<k> { void insert(K key, V value); Entry<k> remove(); int size(); boolean isEmpty(); } </k></k>
다음 구조에서는 노드 및 항목, 첫 번째, 마지막 및 크기 속성, 그리고 CompareTo에 대한 클래스를 사용합니다
우선순위 큐는 정렬된(Sorted Priority Queue)과 정렬되지 않은(Unorted Priority Queue) 두 가지로 나누어집니다
정렬된 우선순위 대기열
정렬된 목록은 노드를 올바른 위치에 삽입하므로 제거가 쉽습니다. 첫 번째 노드만 제거하면 됩니다(ED를 수행하는 프로그래머가 우선 순위가 가장 높은 요소가 시작 부분에 있어야 한다고 정의한 경우)
어느 노드가 가장 높은 우선순위를 가지고 있는지 확인하기 위해 반환을 통해 이 E.D 실행에 대한 중요한 결과를 얻을 수 있는 컬렉션 함수인 CompareTo를 사용합니다.
- 부정적: 메소드를 호출하는 객체가 매개변수로 전달된 객체보다 "작은" 경우
- 0: 개체가 동일한 경우
- 긍정: 메소드를 호출하는 객체가 매개변수로 전달된 객체보다 "큰" 경우.
끼워 넣다
참가하려면 몇 가지 사항을 확인해야 합니다
1단계 → 새 노드 생성
Node newNode = new Node(key, value)
2단계 → Queue가 비어 있는지 확인하고, 그렇다면 유일한 노드가 될 것이라는 점을 고려하여 Head와 Last를 새 노드로 배치합니다
public interface Queue<e> { void enqueue(E value); //enfileira E dequeue(); //remove e desenfileira E first(); //retorna primeiro elemento int size(); //algumas literaturas se chama lenght() boolean isEmpty(); } </e>
3단계 → 목록의 유일한 요소가 아닌 경우 새 노드가 첫 번째 노드에 비해 우선순위가 높은지 여부를 확인해야 합니다.
public interface PriorityQueueOg<k> { void insert(K key, V value); Entry<k> remove(); int size(); boolean isEmpty(); } </k></k>
3단계 → 목록의 마지막 요소와 비교
Node newNode = new Node(key, value)
4단계 → 다 안되면 중간만 남습니다! 이를 위해서는 newNode(nN) 앞으로 갈 보조 노드를 만들고 두 노드를 비교해야 합니다. auxNode가 아무 것도 가리키지 않거나 nN이 auxNode보다 클 때(더 크므로 비교는 종료됩니다) 줄이 늦었습니다.) 이 while은 aux가 두 노드의 값을 비교하고 이를 찾으면 auxNode 뒤에 nN을 배치하는 데 사용됩니다
if(isEmpty()){ first = newNode; last = newNode; }else{
제거하다
Sorted의 제거 방법은 이미 언급했듯이 대기열이 이미 구성되어 있기 때문에 훨씬 간단합니다.
첫 번째 단계 → 모든 제거 메소드는 제거할 요소를 반환하므로 항목을 생성하는 단계가 됩니다(왜 노드가 아닌가?)
if(compare(newNode, first) <p>2단계 → 그런 다음 이미 첫 번째 노드를 제거할 예정이므로 First 옆에 있는 노드를 First로 지정하세요<br> </p> <pre class="brush:php;toolbar:false"> }else if(compare(newNode, last)>=0){ //Se o nN for maior que o L //Significa que o número de nN é maior que L //Então bota o nN para ultimo newNode.previous=last; last.next=newNode; last = newNode; }else{
3단계 → 대기열에 요소가 하나만 있는지 확인하세요. 그렇다면 대기열이 비어 있기 때문입니다! 그런 다음 F와 L을 null로 설정해야 합니다
}else{ //se nao for nada, está no meio //entao temos que achar entre qual dos meios Node auxNode = first; while(compare(newNode, auxNode)>0 && auxNode.next!=null){ //enquanto o newNode tiver prioridade maior que o auxiliar //e o auxiliar tiver um proximo auxNode = auxNode.next; } newNode.next = auxNode; newNode.previous = auxNode.previous; } }
4단계 → 유일한 요소가 아니라면 다른 요소도 있다는 뜻입니다! 따라서 2단계에서 첫 번째 항목을 제거하면 이전에 First였던 항목이 여전히 이전 항목에 의해 연결되어 있으므로 다음을 수행해야 합니다.
Entry<k> max = maxPriority(); </k>
최대 우선순위
목록에서 우선순위가 가장 높은 요소를 반환하는 메서드이며, 순서가 있으므로 첫 번째 요소만 반환합니다.
first = first.next;
점근적 분석
Método | O(_) |
---|---|
size | O(1) |
isEmpty | O(1) |
insert | O(n) |
remove | O(1) |
maxPriority | O(1) |
정렬되지 않은 우선순위 대기열
무질서한 대기열은 주문한 대기열과 매우 다릅니다! 그의 방법부터 시작해 보겠습니다.
끼워 넣다
정렬되지 않음, 좋아요, 무질서에 추가하려면 이 새 요소가 어디에 있을지 걱정할 필요 없이 마지막에 추가하기만 하면 됩니다!
1단계 → 목록이 비어 있는지 확인합니다. 비어 있으면 추가할 노드가 첫 번째(First)와 마지막(Last)이 되기 때문입니다
public interface Queue<e> { void enqueue(E value); //enfileira E dequeue(); //remove e desenfileira E first(); //retorna primeiro elemento int size(); //algumas literaturas se chama lenght() boolean isEmpty(); } </e>
2단계 → 비어 있지 않으면 마지막에 이 노드를 추가하는 것만 신경쓰시면 됩니다!
public interface PriorityQueueOg<k> { void insert(K key, V value); Entry<k> remove(); int size(); boolean isEmpty(); } </k></k>
최대 우선순위
Unsorted에서 제거는 Sorted의 단순한 코드 줄보다 훨씬 더 복잡합니다…
“왜요?” 당신이 묻는다면, 우리는 maxPriority라는 메소드(다른 버전에서도 훨씬 간단했습니다)를 사용해야 합니다. 이 메소드의 목표는 가장 높은 우선순위를 가진 노드를 찾는 것입니다. 이전에는 단 몇 줄의 코드만으로 간단한 방식으로 가르쳤지만 이제는 우선순위가 가장 높은 노드가 실제로 어디에 있는지 모르기 때문에 이를 찾기 위해 전체 대기열을 통과해야 합니다! 따라서 제거 자체를 살펴보기 전에 maxPriority를 살펴보겠습니다.
첫 번째 단계 → 데이터 구조를 순회할 때마다 두 개의 노드가 필요합니다. 즉, 항상 진행되는 보조 노드와 달성하려는 노드(이 경우 MaxPriority)
Node newNode = new Node(key, value)
2단계 → 이 두 개는 노드 내에서 실행되며 aux가 null(큐의 끝)에 도달할 때만 종료됩니다. 이들 노드를 비교하여 음수이면 aux가 max보다 작으므로 max가 가장 크다는 뜻이고, max node의 값을 업데이트한 후 aux를 실행하게 합니다.
if(isEmpty()){ first = newNode; last = newNode; }else{
제거하다
1단계 → 모든 emove에서 제거할 노드를 저장할 변수를 만듭니다. 이 경우 maxPriority
메소드를 호출하기 때문에 어느 것이 제거될지 이미 알고 있습니다.
if(compare(newNode, first) <p>2단계 → 그런 다음 그것이 유일한 요소인지 확인하십시오. 그렇다면 F와 L은 null입니다!<br> </p> <pre class="brush:php;toolbar:false"> }else if(compare(newNode, last)>=0){ //Se o nN for maior que o L //Significa que o número de nN é maior que L //Então bota o nN para ultimo newNode.previous=last; last.next=newNode; last = newNode; }else{
3단계 → 유일한 것이 아니면 다른 옵션이 있습니다. max가 마지막이면 마지막을 제거하고, 첫 번째라면 첫 번째를 제거하고, 둘 중 하나도 아니면, 안에 있습니다. 가운데!
}else{ //se nao for nada, está no meio //entao temos que achar entre qual dos meios Node auxNode = first; while(compare(newNode, auxNode)>0 && auxNode.next!=null){ //enquanto o newNode tiver prioridade maior que o auxiliar //e o auxiliar tiver um proximo auxNode = auxNode.next; } newNode.next = auxNode; newNode.previous = auxNode.previous; } }
4단계 → 중간에 있으면 군중 속에 있는 max를 제거해야 하며, 이는 아무도 지적하지 않을 때 발생합니다.
Entry<k> max = maxPriority(); </k>
점근적 분석
Método | O(_) |
---|---|
size | O(1) |
isEmpty | O(1) |
insert | O(1) |
remove | O(n) |
maxPriority | O(n) |
위 내용은 우선 대기열! 이를 분해하여 데이터 구조의 이 부분에 대해 알아 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

javaachievesplatformincendenceThoughthehoughthejavavirtualmachine (JVM), hittoutModification.thejvmcompileSjavacodeIntOplatform-independentByTecode, whatitTengretsAndexeSontheSpecoS, toplacetSonthecificos, toacketSecificos

javaispowerfuldueToitsplatformincendence, 객체 지향적, RichandardLibrary, PerformanceCapabilities 및 StrongSecurityFeatures.1) Platform IndependenceAllowsApplicationStorunannyDevicesUpportingjava.2) 대상 지향적 프로그래밍 프로모션 Modulara

최고 Java 기능에는 다음이 포함됩니다. 1) 객체 지향 프로그래밍, 다형성 지원, 코드 유연성 및 유지 관리 가능성 향상; 2) 예외 처리 메커니즘, 시도 캐치-패치 블록을 통한 코드 견고성 향상; 3) 쓰레기 수집, 메모리 관리 단순화; 4) 제네릭, 유형 안전 강화; 5) 코드를보다 간결하고 표현력있게 만들기위한 AMBDA 표현 및 기능 프로그래밍; 6) 최적화 된 데이터 구조 및 알고리즘을 제공하는 풍부한 표준 라이브러리.

javaisnotentirelyplatformindent의 의존적 duetojvmvariationsandnativecodeintegration

TheJavavirtualMachine (JVM) isanabstractcomputingmachinecrucialforjavaexecutionasitsjavabytecode, "writeonce, runanywhere"기능을 가능하게합니다

javaremainsagoodlugageedueToitscontinuousevolutionandrobustecosystem.1) lambdaexpressionsenhancececeadeabilitys.2) Streamsallowforefficileddataprocessing, 특히 플레어로드 라트 웨이션

javaisgreatduetoitsplatform incendence, robustoopsupport, extensibraries 및 strongcommunity.1) platforminceptenceviajvmallowscodetorunonvariousplatforms.2) oopeatures inncapsulation, Nheritance, and Polymorphismenblularandscode.3)

Java의 5 가지 주요 특징은 다형성, Lambda Expressions, Streamsapi, 제네릭 및 예외 처리입니다. 1. 다형성을 사용하면 다른 클래스의 물체가 공통 기본 클래스의 물체로 사용될 수 있습니다. 2. Lambda 표현식은 코드를보다 간결하게 만듭니다. 특히 컬렉션 및 스트림을 처리하는 데 적합합니다. 3.StreamSapi는 대규모 데이터 세트를 효율적으로 처리하고 선언적 작업을 지원합니다. 4. 제네릭은 유형 안전 및 재사용 성을 제공하며 편집 중에 유형 오류가 잡히립니다. 5. 예외 처리는 오류를 우아하게 처리하고 신뢰할 수있는 소프트웨어를 작성하는 데 도움이됩니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

드림위버 CS6
시각적 웹 개발 도구

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

Dreamweaver Mac版
시각적 웹 개발 도구