데이터 구조 스택 및 큐 (1)

1. 스택과 큐의 정의와 특성

  1. 스택 : 스택이라고도하는 스택 (스택)은 테이블의 한쪽 끝에서 작업을 삽입 및 삭제하도록 제한되는 선형 테이블 ( 후입 선출 )입니다. 이 끝을 스택 맨 위 라고하고 다른 끝을 스택 맨 아래 라고합니다 . 요소가없는 빈 목록을 빈 스택이라고합니다.

  2. 대기열 : 스택과 달리 대기열은 선입 선출 선형 목록입니다. 테이블의 앞쪽 끝에서 삭제 작업을 허용하고 테이블의 뒤쪽 끝에서 작업을 삽입 할 수 있습니다. 삽입을 허용하는 끝을 후면이라고하고 삭제를 허용하는 끝을 전면이라고합니다.

    스택에 새 요소를 삽입하는 것을 스택으로 푸시라고도하며 스택에서 요소를 삭제하는 것을 스택 만들기라고도합니다. 대기열 요소를 대기열에 삽입하는 것을 대기열에 추가하고 대기열에서 대기열 요소를 삭제하는 것을 대기열에서 빼기라고합니다. 선형 테이블과 마찬가지로 스택 및 큐의 스토리지 구조에는 순차 및 체인도 포함됩니다.

    원본 링크 : https://blog.csdn.net/qq_41117236/article/details/80764231

요약 : 스택과 대기열은 본질적으로 선형 테이블이지만 작동이 제한됩니다.

2. 스택과 큐의 적용

사례 번호 1 :

염기 간 변환 : 우리는 종종 십진수 161을 8 진수로 변환하는 것과 같은 던지기 및 회전 나누기 방법을 사용합니다.image.png

사례 2. 대괄호 일치 :

코드를 작성할 때 종종 중첩 된 괄호를 많이 사용하고 컴퓨터는 스택의 특성을 사용하여 일치시킵니다.image.png

사례 3. 식 값 :

예를 들어, 표현식 (a + b) * c + e / f

컴퓨터는 또한 스택을 사용하여 계산을 수행하고 먼저 연산자 스택 OPTR 피연산자 스택 OPND를 만듭니다.

* 번호를 스캔하여 스택 OPND로 밀어 넣습니다.

운영자가 스캔되면 :

  1. 연산자가 스택 맨 위에있는 OPTR 연산자보다 우선 순위가 높은 경우 스택 OPTR로 푸시됩니다 (OPTR에 처음에 요소가없는 경우 연산자가 스택으로 직접 푸시 됨).

  2. 연산자의 우선 순위가 OPTR 스택 상위 연산자보다 낮은 경우 계산을 위해 OPND 스택 상단에서 두 개의 숫자를 꺼내고 계산 결과를 OPND 스택에 푸시합니다.

* 마지막 문자를 만날 때까지 현재 문자를 계속 처리합니다.

3. 순환 대기열

순환 큐는스토리지 공간의 마지막 위치를 첫 번째 위치 래핑 하여 큐가 재활용 할 논리적 링 공간을 형성하는 것입니다.

여기서는 순환 큐의 프로그램 구현에 대해서만 이야기하고, 다른 순차 스택, 체인 스택 등에 대해서는 이전에 시퀀스 목록과 링크 목록에 도입 한 적이 있으며 거의 ​​변화가 없습니다.

순환 스택 대신 순환 대기열이있는 이유는 대기열이 "선입 선출"이므로 공간을 재활용 할 수 있기 때문입니다. MAXQSIZE는 큐의 길이이고 Q.rear는 마지막 요소의 다음 요소를 가리킨다 고 가정합니다. Q.front는 시작 요소를 가리 킵니다.

먼저 대기열을 만듭니다.

 #define MAXQSIZE 64 
 구조체 데이터 
{ 
        char name []; 
        int 나이; 
}; 
 struct Com 
 { 
         struct data arr [MAXQSIZE]; 
         int 후면 = 0; 
        int 앞 = 0; 
         
 }; 
int main 
{ 
        struct Com 멤버; 
        반환 0; 
}

요소 삽입

        void insert (struct Com 멤버, struct 데이터 ele) 
        { 
        if ((member.rear + 1) % MAXQSIZE == member.front) 
                   return; 
         else         
                {  
                 * (member.arr [member.front]) = ele; 
                  member.rear = (member.rear + 1) % MAXQSIZE; 
                 } 
        } 
       // 순환 대기열이 마스터 % 작업을 수행하는 것이 어렵지 않음을 알 수 있습니다.

추천

출처blog.51cto.com/14961637/2665769