2019 왕도 의 - 선형 표

5808 단어 왕도
1. 선형 표 의 정의 와 기본 작업
  1. 선형 표 의 정의
    선형 표 는 같은 데이터 형식의 n (n > = 0) 개 데이터 요 소 를 가 진 유한 한 서열 이다.그 중에서 n 은 표 길이 이 고 n = 0 일 때 이 선형 표 는 빈 표 이다.L 로 선형 표를 명명 하면 일반적으로 다음 과 같이 표시 합 니 다.
          L=(a1,a2,a3...ai,ai+1...an)
   그 중에서 a1 은 유일한 첫 번 째 데이터 요소 이 고 표 두 요소 라 고도 부른다.an 은 유일한 마지막 데이터 요소 로 표 미 요소 라 고도 부른다.첫 번 째 요 소 를 제외 하고 모든 요 소 는 하나의 직접적인 선구자 만 있다.마지막 요 소 를 제외 하고 모든 요 소 는 하나의 직접 후계 만 있다.이상 은 선형 표 의 논리 적 특성 이다. 이런 선형 질서 있 는 논리 구 조 는 바로 선형 표 이름 의 유래 이다.
      표 의 나무 에 한계 가 있다.
      표 에서 요 소 는 논리 적 인 순서 성 을 가지 고 서열 에서 각 요소 의 정렬 은 선후 순서 가 있다.
      표 의 요 소 는 모두 데이터 요소 이 고 모든 요 소 는 하나의 요소 입 니 다.
      표 에 있 는 요소 의 데이터 형식 이 모두 같 습 니 다.이것 은 모든 요소 가 같은 크기 의 공간 을 차지 하고 있다 는 것 을 의미한다.
      표 중의 요 소 는 추상 성 을 가지 고 있다.원소 간 의 논리 적 관계 만 논의 하고 원소 가 어떤 내용 을 표시 하 는 지 는 고려 하지 않 는 다 는 것 이다.
    주의: 선형 표 는 일종 의 논리 구조 로 원소 간 의 일대일 의 인접 관 계 를 나타 낸다.순서 표 와 링크 는 저장 구 조 를 말 하 는데 이들 은 서로 다른 차원 의 개념 에 속 하기 때문에 헷 갈 리 지 마라.
 2. 선형 표 의 기본 조작
    하나의 데이터 구조의 기본 조작 은 가장 핵심 적 이 고 기본 적 인 조작 을 가리킨다.다른 비교적 복잡 한 조작 은 그 기본 조작 을 호출 하여 실현 할 수 있다.선형 표 의 주요 조작 은 다음 과 같다.
InitList(&L) :     。         。
Length(L) :    。     L   , L        。
LocateElem(L,e):       。  L              。
GetElem(L,i):       。   L  i        。
ListInsert(&L,i,e):     。   L  i          e。
ListDelete(&L,i,&e):     。    L  i      ,  e        。
PrintList(L):     。          L      。
Empty(L) :     。 L   ,   true,    false.

   주의: 기본 작업 의 실현 은 어떤 저장 구 조 를 사용 하 느 냐 에 달 려 있 고 저장 구조 가 다 르 며 알고리즘 의 실현 도 다르다.
           선형 표 의 정 의 는 유한 한 서열 이 고 논리 적 인 관 계 를 가진다.
           집합 중의 한 요 소 는 앞 뒤 구동 관계 가 없 기 때문에 선형 표 가 아니다.
           인접 표 는 저장 구조 이 고 선형 표 는 논리 구조 이다.
  2. 선형 표 의 순서 표시
     1. 선형 표 의 순서 저장 은 순서 표 라 고도 부른다.그것 은 선형 표 의 데이터 요 소 를 순서대로 저장 하 는 주소 연속 저장 장치 이다.
      선형 표 L 저장 의 시작 위 치 를 LOC (A) 로 가정 하고 sizeof (ElemType) 는 모든 데이터 요소 가 저장 공간 을 차지 하 는 크기 입 니 다.
      선형 표 의 요소 유형 을 ElemType 이 라 고 가정 하고 선형 표 의 순서 저장 유형 은 다음 과 같다.
 #define MaxSize 50      //          

       typedef struct{

          ElemType data[MaxSize];     //      

          int length;      //        

       }SqList;          //        

       1 차원 배열 은 정적 으로 분 배 될 수도 있 고 동적 으로 분 배 될 수도 있다.정적 분 배 를 할 때 배열 의 크기 와 공간 이 고정 되 어 있 기 때문에 공간 이 가득 차 면 새로운 데 이 터 를 추가 하면 넘 쳐 프로그램 이 무 너 집 니 다.
 한편, 동적 분 배 를 할 때 배열 을 저장 하 는 공간 은 프로그램 이 실행 하 는 과정 에서 동적 저장 배분 문 구 를 통 해 분 배 된 것 이다. 데이터 공간 이 가득 차 면 더 큰 저장 공간 을 만들어 원래 의 저장 공간 을 교체 할 수 있다.저장 소 배열 공간 을 확장 하 는 목적 을 달성 할 수 있다.
#define InitSize 100                    //        

   typedef struct{

      ElemType *data;               //           

      int MaxSize,length;          //            

   }SeqList;                       //              

  c 의 초기 동적 할당 문:
    L.data = (ElemType*)malloc(sizeof(ElemType)*InitSize);

   C + + 의 초기 동적 할당 문 구 는 다음 과 같 습 니 다.
     L.data = new ElemType[InitSize];

      주의: 동적 분 배 는 체인 식 저장 이 아니 라 순서 저장 구조 에 속 합 니 다. 그 물리 구 조 는 변화 가 없고 랜 덤 저장 방식 입 니 다. 분 배 된 공간 크기 는 실행 할 때 결정 할 수 있 습 니 다.
   2. 순서 표 기본 작업 의 실현
     (1) 삽입 동작
           순서 표 L 의 제 i (1 < = i < = L. length + 1) 개 위치 에 새 요소 e 를 삽입 합 니 다.i 의 입력 이 합 법 적 이지 않 으 면 false 로 돌아 가 삽입 에 실 패 했 음 을 표시 합 니 다.그렇지 않 으 면 순서 표 의 i 번 째 요소 와 그 후의 모든 요 소 를 오른쪽으로 한 칸 이동 시 키 고 빈 위 치 를 비 워 새로운 요소 e 를 삽입 합 니 다. 순서 표 의 길 이 를 1 증가 시 키 고 삽입 에 성공 하면 true 로 돌아 갑 니 다. (C + 참조 참조 참조 참조 참조 참조 참조 참조 참조)
 bool ListInsert(SqList &L, int i, ElemType e){

              if(L.length >= MaxSize)                   //        

                    return false;

              if(1<=i && i <= L.length + 1){

                   for(int j = L.length;j >= i;j-- )

                         L.data[j] = L.data[j - 1];

                    L.data[i-1] = e;                                   //  i    i-1,      i   e,       

                    L.length++;

                    return true;

               }else{

                   return false;

               }
          }  

             가장 좋 은 상황: 표 끝 에 i = n + 1 을 삽입 하고 요소 후 이동 문 구 는 실행 되 지 않 으 며 시간 복잡 도 는 O (1) 입 니 다.
             최 악의 경우: 표 머리 에 삽입 (즉 i = 1) 하고 요소 후 이동 문 구 는 n 회 실행 되 며 시간 복잡 도 는 O (n) 입 니 다.
             평균 상황: pi (pi = 1 / (n + 1) 가 i 번 째 위치 에 노드 를 삽입 할 확률 이 라 고 가정 하면 길이 가 n 인 선형 표 에 노드 를 삽입 할 때 필요 한 이동 노드 의 평균 횟수 는 n / 2 이다.
       (2) 삭제 작업
             순서 표 L 의 i (1 < = i < = l. length) 개 위치의 요 소 를 삭제 하고 true 를 성공 적 으로 되 돌려 주 며 삭 제 된 요 소 를 인용 변수 e 로 되 돌려 줍 니 다. 그렇지 않 으 면 false 로 되 돌려 줍 니 다.             
 bool ListDelete(SqList & L, int i, ElemType &e){

                     if(1 > i || L.length < i)

                             return false;

                     e = L.data[i-1];

                     for(int j = i;j 

               가장 좋 은 상황 은 팀 의 꼬리 요 소 를 삭제 하고 이동 할 필요 가 없 으 며 시간 복잡 도 는 O (1) 입 니 다.
               최 악의 경우, 헤더 요 소 를 삭제 하려 면 n - 1 회 이동 해 야 합 니 다. 시간 복잡 도 는 O (n) 입 니 다.   
               평균 상황: 필요 한 이동 노드 의 평균 횟수 는: (n - 1) / 2 이다. O(n)
        (3) 값 으로 찾기
              순서 표 L 에서 첫 번 째 요소 값 이 e 인 요 소 를 찾 고 그 위 치 를 되 돌려 줍 니 다.
              int LocatElem(SqList L,ElemType e){

                   for(int i = 0;i < L.length;i++){

                        if(L.data[i] == e)

                             return i+1;

                   }

                   return 0;                 //   

              }        

             가장 좋 은 것: 표 머리 에서 한 번 만 비교 하면 시간 복잡 도 는 O (1) 이다.
             최 악: 끝 에 있 거나 존재 하지 않 습 니 다. n 회, O (n) 입 니 다.
             평균 n + 1 / 2

좋은 웹페이지 즐겨찾기