스택과 큐의 기본 차이점은 무엇입니까?


130

스택과 큐의 기본 차이점은 무엇입니까 ??

차이점을 찾을 수 없습니다 도와주세요.

어떻게 당신은 스택과 큐를 구별합니까?

다양한 링크에서 답변을 검색하여이 답변을 찾았습니다 ..

고급 프로그래밍에서

스택은 기존 요소의 "최상위"에 새 요소를 배치하여 연장하고 기존 요소의 상단에서 요소를 제거하여 단축되는 요소 목록 또는 요소 시퀀스로 정의됩니다. "푸시"및 "팝"의 수학 연산을 사용하는 ADT [Abstract Data Type]입니다.

큐는 기존 요소의 뒤쪽에 새 요소를 배치하여 추가되고 큐 앞의 요소를 제거하여 단축되는 요소 시퀀스입니다. ADT [Abstract Data Type]입니다. Java, C ++, Python 등의 프로그래밍에는 이러한 용어에 대한 이해가 더 많습니다.

더 자세한 답변을받을 수 있습니까? 도와주세요.


12
자신의 질문에 대답 한 것 같습니다. 스택은 후입 선출 (LIFO) 컨테이너이고 대기열은 선입 선출 (FIFO) 컨테이너입니다.
이리 디움

답변:


151

스택 은 LIFO (last in first out) 데이터 구조입니다. 위키 백과에 연결된 링크에는 자세한 설명과 예제가 포함되어 있습니다.

는 선입 선출 (FIFO) 데이터 구조입니다. 위키 백과에 연결된 링크에는 자세한 설명과 예제가 포함되어 있습니다.


131

용지 더미를 상상해보십시오 . 스택에 넣은 마지막 조각이 맨 위에 있으므로 가장 먼저 나옵니다. 이것은 LIFO 입니다. 종이를 추가하는 것을 "푸시"라고하고 종이를 제거하는 것을 "퍼핑"이라고합니다.

가게에서 대기열을 상상해보십시오 . 첫 번째 줄은 첫 줄을 벗어난 사람입니다. 이다 FIFO . 전화를받는 사람은 "대기열"상태가되고, 전화를받는 사람은 "대기열 상태"가됩니다.


3
내가 생각할 수있는 최고의 비유 중 하나.
Yeikel

83

비주얼 모델

팬케이크 스택 (LIFO)

하나를 추가하거나 제거하는 유일한 방법은 맨 위입니다.

팬케이크 스택

라인 (FIFO)

도착하면 대기열 끝에 도착하고 출발하면 대기열의 정면에서 나갑니다.

dmv 라인

재미있는 사실 : 영국인은 사람들의 줄을 대기열 로 지칭


6
이봐, 대답은 이모 야. 감사합니다 @Jacksonkr
Kulasangar

Haha는 이것이 대기열과 스택에 대한 완벽한 설명이라는 것을 확신하지만 인수를 위해 첫 번째 팬케이크를 접시에 추가하려면 어떻게해야합니까? 나는 이것이 stack.size () 대 if (! stack.isEmpty ())로 완료 될 수 있다는 것을 알고 있지만 여전히 첫 번째 팬케이크가 가장 좋을 것입니다 :) ... 어느 쪽이든, 좋은 대답과 나는 이것이 가장 분명한 것은 ... 영국인이 줄을 대기열이라고하지만 (정확한 경우) 프로그래밍이 아닌 언어에서는 첫 번째 항목이 첫 번째 항목이 먼저 나오는 줄을 여전히 고려한다고 생각합니다 (행 / 대기열 종료 후) )
ViaTech

잠깐, 그들은 다른 곳에서 대기열이라고하지 않습니까?
jaunt

37

둘 다 정렬 된 목록으로 생각할 수 있습니다 (목록에 추가 된 시간순으로 정렬). 두 요소의 주요 차이점은 새로운 요소가 목록에 입력되고 이전 요소가 목록을 떠나는 방법입니다.

스택의 경우 list a, b, c가 있고 추가 d하면 끝에 고정됩니다. 그래서 끝납니다 a,b,c,d. 목록의 요소를 표시하려면 마지막으로 추가 한 요소 인을 제거하십시오 d. 팝 후, 내 목록은 이제 a,b,c다시

대기열의 경우 동일한 방식으로 새 요소를 추가합니다. 추가 후 a,b,c가됩니다 . 그러나 이제 팝업하면 목록의 앞쪽에서 요소를 가져와야 합니다.a,b,c,ddb,c,d

매우 간단합니다!


14

대기열은 주문한 항목 모음입니다.

대기열의 '프런트'엔드라는 한쪽 끝에서 항목이 삭제됩니다.

대기열의 '후면'이라는 다른 쪽 끝에 항목이 삽입됩니다.

첫 번째로 삽입 된 항목이 첫 번째로 제거됩니다 (FIFO).

스택

스택은 아이템 모음입니다.

마지막으로 삽입 된 항목 중 하나의 데이터 항목에만 액세스 할 수 있습니다.

한쪽 끝에 'Top of the stack'이라는 항목이 삽입 및 삭제됩니다.

역동적이고 끊임없이 변화하는 객체입니다.

모든 데이터 항목이 스택 위에 놓이고 상단에서 제거됩니다

이 액세스 구조는 후입 선출 구조 (LIFO)라고합니다.


따라서 기본적으로 '대기열'은 "FIFO"입니다. 선착순입니다. '스택'은 "LIFO"인 반면-첫 번째 대기열에서 마지막입니다. 나 맞아?
Sebastian Nielsen

@SebastianNielsen 그렇습니다.
Dissanayake

그러나 연결된 목록과 스택의 차이점은 무엇입니까? 동일하지 않습니까?
Sebastian Nielsen

@SebastianNielsen 스택은 ADT이므로 푸시 및 팝 작업 인 인터페이스를 노출하지만 기본 메커니즘 (구현)은 최종 사용자에게 표시되지 않습니다. 스택은 배열 또는 연결된 목록으로 구현할 수 있습니다.
gdyrrahitis

13

스택:

  1. 스택은 스택 맨 위에서 만 요소를 삽입하거나 삭제할 수있는 요소 목록으로 정의됩니다.
  2. 스택의 동작은 후입 선출 (LIFO) 시스템과 같습니다.
  3. 스택은 함수간에 매개 변수를 전달하는 데 사용됩니다. 함수를 호출하면 매개 변수와 로컬 변수가 스택에 저장됩니다.
  4. 재귀를 지원하는 Pascal, c 등과 같은 고급 프로그래밍 언어는 스택을 사용하여 부기입니다. 각 재귀 호출에서 현재 매개 변수 값, 로컬 변수 및 반환 주소 (통화 후 컨트롤이 반환해야하는 주소)를 저장해야합니다.

열:

  1. 큐는 동일한 유형의 요소의 모음입니다. 그것은 호출 삽입리스트의 일단에서 일어날 수있는 선형리스트이다 후방 리스트 및 삭제는 착신 만 타단 일어날 수 전면 리스트
  2. 대기열의 동작은 선입 선출 (FIFO) 시스템과 같습니다.

나는 당신이 스택의 끝이나 시작 부분에 삽입 할 수 있다고 확신합니다. 여기서 주목해야 할 중요한 것은 FIFO 대 LIFO
Mike

6

스택은 한 번에 하나씩 저장하고 검색 할 수있는 요소의 모음입니다. 요소는 저장 시간의 역순으로 검색됩니다. 즉, 저장된 최신 요소는 다음에 검색 할 요소입니다. 스택을 LIFO (Last-In-First-Out) 또는 FILO (First-In-Last-Out) 구조라고도합니다. 최신 요소 (일반적으로 'top'요소라고 함)를 검색 할 때까지 이전에 저장된 요소를 검색 할 수 없습니다.

큐는 한 번에 하나씩 저장하고 검색 할 수있는 요소의 모음입니다. 요소는 저장 시간 순서대로 검색됩니다. 즉, 저장된 첫 번째 요소는 검색 할 다음 요소입니다. 큐는 FIFO (First-In-First-Out) 또는 LILO (Last-In-Last-Out) 구조라고도합니다. 이후에 저장된 요소는 첫 번째 요소 (일반적으로 'front'요소라고 함)가 검색 ​​될 때까지 검색 할 수 없습니다.


2

스택 : 스택은 스택 맨 위에서 만 요소를 삽입하거나 삭제할 수있는 요소 목록으로 정의됩니다.

스택은 함수간에 매개 변수를 전달하는 데 사용됩니다. 함수를 호출하면 매개 변수와 로컬 변수가 스택에 저장됩니다.

스택은 한 번에 하나씩 저장하고 검색 할 수있는 요소의 모음입니다. 요소는 저장 시간의 역순으로 검색됩니다. 즉, 저장된 최신 요소는 다음에 검색 할 요소입니다. 스택을 LIFO (Last-In-First-Out) 또는 FILO (First-In-Last-Out) 구조라고도합니다. 최신 요소 (일반적으로 'top'요소라고 함)를 검색 할 때까지 이전에 저장된 요소를 검색 할 수 없습니다.

열:

큐는 동일한 유형의 요소의 모음입니다. 목록의 한 쪽 끝에서 삽입이 발생할 수있는 선형 목록이며, 목록의 뒤쪽이라고하는 다른 끝에서만 삭제가 발생할 수 있습니다.

큐는 한 번에 하나씩 저장하고 검색 할 수있는 요소의 모음입니다. 요소는 저장 시간 순서대로 검색됩니다. 즉, 저장된 첫 번째 요소는 검색 할 다음 요소입니다. 큐는 FIFO (First-In-First-Out) 또는 LILO (Last-In-Last-Out) 구조라고도합니다. 이후에 저장된 요소는 첫 번째 요소 (일반적으로 'front'요소라고 함)가 검색 ​​될 때까지 검색 할 수 없습니다.


2

스택과 큐에 대한 설명을 시도하고 지나치게 단순화하기 위해 체인의 한쪽 끝에서 액세스 할 수있는 정보 요소의 동적 체인이며 이들 간의 유일한 차이점은 다음과 같습니다.

스택 작업시

  • 체인의 한쪽 끝에 요소를 삽입하고
  • 체인의 같은 끝에서 요소를 검색 및 / 또는 제거

대기열과 함께

  • 체인의 한쪽 끝에 요소를 삽입하고
  • 다른 쪽 끝에서 검색 / 제거

참고 : 체인에서 요소를 검색하거나 요소를 읽거나 값에 액세스 할 때 인스턴스가 있지만 인스턴스를 제거 할 때 인스턴스가 있기 때문에이 문맥에서 retrieve / remove의 추상 표현을 사용하고 있습니다. 체인과 마지막으로 동일한 호출로 두 작업을 수행하는 경우가 있습니다.

또한 단어 요소는 가상 체인을 최대한 추상화하고 특정 프로그래밍 언어 용어와 분리하기 위해 의도적으로 사용됩니다. element라고하는이 추상 정보 엔터티는 언어에 따라 포인터, 값, 문자열 또는 문자, 객체 등 모든 것이 될 수 있습니다.

대부분의 경우 실제로는 값 또는 메모리 위치 (예 : 포인터)입니다. 나머지는 언어 전문 용어 뒤에이 사실을 숨기고 있습니다 <

큐는 요소의 순서가 중요하고 요소가 프로그램에 처음 왔을 때와 정확히 같아야 할 때 도움이 될 수 있습니다. 예를 들어 오디오 스트림을 처리하거나 네트워크 데이터를 버퍼링 할 때. 또는 모든 유형의 저장 및 전달 처리를 수행 할 때. 이 모든 경우에 프로그램에 제공된 순서대로 요소 순서대로 출력해야합니다. 그렇지 않으면 정보의 의미가 멈출 수 있습니다. 따라서 일부 입력에서 데이터를 읽고 일부 처리를 수행하고 대기열에 데이터를 쓰는 부분과 대기열에서 데이터를 검색하여 추가 처리 또는 데이터 전송을 위해 다른 대기열에 저장하는 부분에서 프로그램을 중단 할 수 있습니다 .

스택은 프로그램의 즉각적인 단계에서 사용될 요소를 임시로 저장해야 할 때 유용 할 수 있습니다. 예를 들어, 프로그래밍 언어는 일반적으로 스택 구조를 사용하여 변수를 함수에 전달합니다. 그들이 실제로하는 일은 스택에 함수 인수를 저장 (또는 푸시) 한 다음 스택에서 동일한 수의 요소를 제거하고 검색 (또는 팝)하는 함수로 점프하는 것입니다. 그렇게하면 스택의 크기는 함수의 중첩 호출 수에 따라 달라집니다. 또한 함수를 호출하고 수행 한 작업을 마친 후에는 스택을 호출하기 전과 동일한 조건으로 스택을 유지합니다! 이렇게하면 다른 기능이 작동하는 방식을 무시하고 모든 기능이 스택으로 작동 할 수 있습니다.

마지막으로, 비슷한 개념에 대해 다른 용어가 사용된다는 것을 알아야합니다. 예를 들어 스택을 힙이라고 할 수 있습니다. 이러한 개념의 하이브리드 버전도 있습니다. 예를 들어 이중 엔드 큐는 스택과 큐와 동시에 동시에 작동 할 수 있습니다. 두 엔드가 동시에 액세스 할 수 있기 때문입니다. 또한 데이터 구조가 스택 또는 대기열로 제공된다고해서 반드시 그러한 구조로 구현 된 것은 아닙니다. 데이터 구조는 단순히 그렇게 동작하도록 만들어 질 수 있기 때문입니다. 즉, 데이터 구조에 푸시 및 팝 방법을 제공하면 마술처럼 스택이됩니다!


코드가 아닌 텍스트에는 코드 형식을 사용하지 마십시오.
Lorne의 후작

1

스택은 LIFO (last in, first out) 목록입니다. 즉, 3 개의 요소가 10,20,30 개의 스택에 삽입되었다고 가정합니다. 10이 먼저 삽입되고 30이 마지막에 삽입되므로 30이 스택에서 먼저 삭제되고 10이 스택에서 마지막으로 삭제됩니다. 이것은 LIFO 목록 (Last In First Out)입니다.

QUEUE는 선입 선출 (FIFO) 목록 (선입 선출)입니다. 먼저 삭제 될 요소가 하나 먼저 삽입됨을 의미합니다.


1

수직 컬렉션으로 간주됩니다. 먼저 컬렉션은 다른 작은 오브젝트를 수집하고 구성하는 오브젝트입니다. 이러한 작은 객체는 일반적으로 요소라고합니다. 이러한 요소는 A가 첫 번째이고 C가 마지막 인 ABC 순서로 스택에서 "밀어집니다". 세로 방향은 다음과 같습니다. 세 번째 요소 추가) C 두 번째 요소 추가) B 첫 번째 요소 추가) A

스택에 처음 추가 된 "A"가 맨 아래에 있습니다. 스택에서 "A"를 제거하려면 먼저 "C", "B"및 대상 요소 "A"를 제거해야합니다. 스택의 복잡성을 처리하는 동안 스택에는 LIFO 접근 방식이 필요합니다. (Last In First Out) 스택에서 요소를 제거 할 때 올바른 구문이 나타납니다. 스택에서 요소를 제거하지 않고 "팝"합니다.

"A"는 스택에 푸시 된 첫 번째 요소이고 "C"는 스택에 푸시 된 마지막 항목이었습니다. 스택의 맨 아래에 무엇이 있는지 확인하려면 3 개의 요소가 스택에 있고 A가 첫 번째 B이고 두 번째가 C이고 세 번째 요소 인 경우 맨 위가 튀어 나와야합니다. 스택의 맨 아래를보기 위해 추가 된 두 번째 요소


질문을 더 좋고 읽기 쉽게 보이도록 형식화하십시오.
Neeku
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.