자 바스 크 립 트 스 택 과 복사

5134 단어 창고카피
창고 정의
1.스 택 은 특수 한 선형 표 이다.그 특수성 은 데이터 요 소 를 삽입 하고 삭제 하 는 작업 을 선형 표 의 한 끝 에서 만 할 수 있다 는 것 이다.

결론:후진 선 출(Last In First Out)은 LIFO 선형 표 라 고 약칭 한다.
창고 의 응용 은 다음 과 같다.디지털 변환,문법 문법 문법 분석,표현 식 값 구하 기 등 이다.
2.대기 열(Queue)도 연산 이 제 한 된 선형 표 입 니 다.그 연산 제한 은 스 택 과 달리 양쪽 모두 제한 이 있 습 니 다.삽입 은 표 의 한 끝 에서 만 진행 할 수 있 고(들 어 갈 수 없 음)삭 제 는 표 의 다른 한 끝 에서 만 진행 할 수 있 습 니 다.삭 제 를 허용 하 는 한 끝 을 팀 의 끝(rear)이 라 고 부 릅 니 다.삽입 을 허용 하 는 한 끝 을 팀 의 머리(Front)라 고 부 릅 니 다.대기 열의 조작 원칙 은 먼저 나 가 는 것 입 니 다.그래서 대열 은 FIFO 표(First In First Out)라 고도 부른다.

스 택 과 대기 열 도 선형 표 이기 때문에 스 택 과 대기 열 은 순서 스 택 과 체인 스 택 두 가지 저장 구조 가 있 는데 이 두 가지 저장 구조 가 다 르 면 스 택 의 기본 연산 을 실현 하 는 알고리즘 도 다르다.
2.JS 스 택 연구
1.스 택(stack)과 더미(hep)
stack 은 자동 으로 분 배 된 메모리 공간 으로 시스템 에서 자동 으로 방출 됩 니 다.힙 은 동적 으로 분 배 된 메모리 로 크기 가 일정 하지 않 아 도 자동 으로 방출 되 지 않 습 니 다.
2.기본 유형 과 인용 유형
(1)기본 형식:스 택 메모리 에 저 장 된 간단 한 데이터 세그먼트,데이터 크기 가 확정 되 고 메모리 공간 크기 가 분 배 될 수 있 습 니 다.
5 가지 기본 데이터 형식 은 Undefined,Null,Boolean,Number,String 이 있 는데 이들 은 직접 값 에 따라 저장 되 기 때문에 직접 접근 할 수 있 습 니 다.
(2)참조 형식:메모리 에 저 장 된 대상 입 니 다.변 수 는 실제 포인터 로 저 장 됩 니 다.이 지침 은 다른 위 치 를 가리 키 고 있 습 니 다.각 공간의 크기 가 다 르 기 때문에 상황 에 따라 특정한 분 배 를 해 야 한다.
인용 형식(예 를 들 어 대상,배열,함수 등)의 값 에 접근 해 야 할 때 먼저 스 택 에서 대상 의 주소 지침 을 얻 은 다음 메모리 에서 필요 한 데 이 터 를 얻 습 니 다.
3.전송 값 과 전송 주소
앞에서 메모리 의 더미,스 택,변수 유형 이 무엇 인지 설명 하려 는 이 유 는 실제 적 으로'얕 은 복사'와'깊 은 복사'가 무엇 인지 잘 이해 하기 위해 서 입 니 다.
기본 유형 과 인용 유형의 가장 큰 차 이 는 실제 적 으로 전송 값 과 전송 주소 의 차이 이다.테스트 용례:

var a = [1,2,3,4,5];
var b = a;
var c = a[0];
alert(b);//1,2,3,4,5 
alert(c);//1 
//             
b[4] = 6;
c = 7;
alert(a[4]);//6
alert(a[0]);//1
위 에서 우 리 는 내 가 b 중의 데 이 터 를 바 꿀 때 a 중의 데이터 도 변화 가 생 겼 다 는 것 을 알 수 있다.그러나 내 가 c 의 데이터 값 을 바 꾸 었 을 때 a 는 변 하지 않 았 다.
이것 이 바로 전송 값 과 전송 주소 의 차이 이다.a 는 배열 로 인용 형식 에 속 하기 때문에 b 에 게 부여 할 때 스 택 에 있 는 주소(다른 이름 의'포인터'를 새로 만 든 것 과 같 습 니 다)입 니 다.메모리 에 있 는 대상 이 아 닙 니 다.c 는 a 더미 메모리 에서 얻 은 데이터 값 일 뿐 스 택 에 저 장 됩 니 다.따라서 b 가 수정 할 때 주소 에 따라 a 더미 로 돌아 가 수정 하고 c 는 스 택 에서 직접 수정 하 며 a 더미 메모리 에 가리 키 지 못 합 니 다.

카피
1.얕 은 복사
앞에서 언급 했 듯 이 하나의 대상 이나 배열 을 정의 할 때 변 수 는 하나의 주소 에 만 저 장 됩 니 다.우리 가 대상 을 복사 할 때 속성 이 대상 이나 배열 이 라면 이때 우리 가 전달 하 는 것 도 하나의 주소 일 뿐이다.따라서 하위 대상 은 이 속성 에 접근 할 때 주소 에 따라 부모 대상 이 가리 키 는 메모리 로 거 슬러 올라간다.즉,부자 대상 이 관련 이 있 고 이들 의 속성 값 은 같은 메모리 공간 을 가리킨다.

var a = {
         key1:"11111"
    }
function Copy(p) {
var c = {};
for (var i in p) { 
           c[i] = p[i];
        }
return c;
  }
     a.key2 = ['  ','  '];
var b = Copy(a);
    b.key3 = '33333';
     alert(b.key1);     //1111111
     alert(b.key3);    //33333
     alert(a.key3);    //undefined
a 대상 중 key 1 속성 은 문자열 이 고 key 2 속성 은 배열 입 니 다.a.b 로 복사 하면 12 속성 이 모두 순조롭게 복사 된다.b 대상 에 게 문자열 형식의 속성 key 3 를 추가 할 때 b 는 정상적으로 수정 할 수 있 으 며 a 에는 정의 가 없습니다.하위 대상 을 설명 하 는 키 3(기본 유형)은 부모 대상 과 관련 이 없 기 때문에 undefined.

b.key2.push("  ");
alert(b.key2);    //  ,  ,  
alert(a.key2);    //  ,  ,  
그러나 수 정 된 속성 이 대상 이나 배열 로 바 뀌 면 부자 대상 간 에 연관 이 생 긴 다.상기 팝 업 결 과 를 통 해 알 수 있 듯 이 나 는 b 대상 을 수정 했다.a,b 의 key 2 속성 값(배열)이 모두 바 뀌 었 다.메모리 의 상 태 는 다음 그림 으로 표시 할 수 있 습 니 다.

키 1 의 값 은 기본 형식 에 속 하기 때문에 복사 할 때 이 데이터 세그먼트 를 전달 합 니 다.그러나 key 2 의 값 은 메모리 의 대상 이기 때문에 key 2 는 복사 할 때 key 2 대상 을 가리 키 는 주 소 를 전달 합 니 다.몇 개의 key 2 를 복사 하 든 그 값 은 항상 부모 대상 을 가리 키 는 key 2 대상 의 메모리 공간 입 니 다.
2.딥 카피
아마도 이상 은 우리 가 실제 인 코딩 에서 원 하 는 결과 가 아 닐 것 이다.우 리 는 부자 대상 간 에 관련 이 있 기 를 원 하지 않 는 다.그러면 이 럴 때 깊 은 복사 본 을 사용 할 수 있다.속성 값 유형 이 배열 이나 이미지 일 때 주소 만 전 달 됩 니 다.그러면 우 리 는 재 귀적 으로 이 문 제 를 해결 하고 부모 대상 에 속 하 는 모든 속성 유형 을 하위 대상 에 게 옮 겨 다 니 면 됩 니 다.테스트 코드 는 다음 과 같 습 니 다:

function Copy(p, c) {
var c = c || {};
for (var i in p) {
if (typeof p[i] === 'object') {
              c[i] = (p[i].constructor === Array) ? [] : {};
             Copy(p[i], c[i]);
           } else {
              c[i] = p[i];
          }
        }
return c;
  }    
     a.key2 = ['  ','  '];
var b={};
     b = Copy(a,b);        
     b.key2.push("  ");
     alert(b.key2);    //  ,  ,  
     alert(a.key2);    //  ,  
위 에서 알 수 있 듯 이 b 의 key 2 배열 을 수정 할 때 a 부모 대상 의 key 2 배열 에 값 을 추가 하지 않 았 습 니 다.즉,하위 대상 이 부모 대상 a 의 key 2 에 영향 을 주지 않 았 습 니 다.그 저장 모드 는 대체로 다음 과 같다.

이상 은 JavaScript 스 택 과 복사 에 대한 상세 한 내용 입 니 다.JS 스 택 복사 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기