데이터 구조 복습 - 제2 장: 선형 표

1. 선형 표: n (n ≥ 0) 개 데이터 요소 로 구 성 된 유한 한 서열 이다.
 
2. 선형 표 의 기본 연산 은 다음 과 같다.
   1) InitList (L), 구조 빈 표, 즉 표 의 초기 화;
   2) ListLength (L), 표 의 결점 개수, 즉 표 의 길이 구하 기;
   3) GetNode (L, i), 표 중의 i 번 째 결점 을 취하 여 1 ≤ i ≤ ListLength (L) 를 요구한다.
   4) LocateNode (L, x) 는 L 의 중간 값 이 x 인 결점 을 찾 고 결점 이 L 에 있 는 위 치 를 되 돌려 줍 니 다. 여러 개의 x 는 첫 번 째 로 되 돌려 주 고 없 으 면 특수 로 되 돌려 줍 니 다.     값 은 찾기 에 실 패 했 음 을 나타 낸다.
   5) InsertList (L, x, i) 는 표 의 i 번 째 위치 에 x 의 새로운 결점 을 삽입 하고 1 ≤ i ≤ ListLength (L) + 1 을 요구한다.
   6) DeleteList (L, i) 표 의 i 번 째 위치의 결점 을 삭제 하고 1 ≤ i ≤ ListLength (L) 를 요구한다.
 
3. 순서 표: 선형 표 의 결점 을 논리 적 인 순서에 따라 주소 연속 저장 장치 에 저장 합 니 다.
 
4. 순서 표 결점 의 저장 주소 계산 공식: Loc (ai) = Loc (a1) + (i - 1) * C;1≤i≤n
 
5. 순서 표 의 기본 연산
 
(1) 삽입
Status ListInsert_Sq(SqList &L, int i, ElemType e){
	if (i<1 || i>L.length + 1) return ERROR;	     //i    
	if (L.length == MAXSIZE) return ERROR;
	//             
	for (j = L.length - 1; j >= i - 1; j--)
		L.elem[j + 1] = L.elem[j]; //            
	L.elem[i - 1] = e;                  //    e   i   
	++L.length;		    //   1
	return OK;
}
 
  
 
              n/2  ,           O(n)。 
   
  


(2)

Status ListDelete_Sq(SqList &L,int i,ElemType &e){
   if((i<1)||(i>L.length)) return ERROR;	 //i    
   e=L.elem[i-1];                    //          e 
  for (j=i;j<=L.length-1;j++)                   
    L.elem[j-1]=L.elem[j];  
                                             //              
   --L.length;               	    //   1
  return OK;
}
 
  
 
  

(n+1)/2 , O(n)。

 

6. : 。

  ,data  next  data ,next 。

 (1) 。 O(n)。

  :

1) ;

2) 。

 (2) 。 O(n)。

1) 。

Status GetElem(LinkList &L, int i, ElemType &e){
	p = L->next; j = 1;                    //   
	while (p&&jnext; ++j;
	}
	if (!p || j>i)return ERROR;     // i       
	e = p->data;         //  i    
	return OK;
}
 
  

2) 。

LNode *LocateELem(LinkList &L,Elemtype e)
{
	p = L->next;
	while (p &&p->data != e)
		p = p->next;
	return p;
	//  L   e        ,      NULL 
}

(3) 연산 삽입.시간 복잡 도 는 O (n) 이다.
Status ListInsert_L(LinkList &L, int i, ElemType e){
	p = L;   j = 0;
	while (p&&jnext; ++j; }
	//   i−1    
	if (!p || j>i−1)return ERROR;//i     + 1    1  
	s = new LNode;			  //     s 
	s->data = e;      		            //   s      e 
	s->next = p->next;	   	  //   s  L  
	p->next = s;
	return OK;
}//ListInsert_L 

(4) 연산 삭제.시간 복잡 도 는 O (n) 이다.
Status ListDelete_L(LinkList &L, int i, ElemType &e){
	p = L; j = 0;
	while (p->next &&jnext; ++j;
	}
	if (!(p->next) || j>i - 1) return ERROR; //        
	q = p->next;           //                
	p->next = q->next; //               
	e = q->data; 	    //           
	delete q; 	              //          
	return OK;
}//ListDelete_L 

7. 순환 링크: 앞 뒤 가 연 결 된 링크 입 니 다.저장량 을 늘 리 지 않 고 표 의 링크 방식 만 수정 하여 표 의 처 리 를 유연 하고 편리 하 게 하 는 것 이 특징 이다.
8. 빈 순환 체인 시 계 는 하나의 자성 순환 의 두 결점 으로 만 표시 된다.
9. 시계의 조작 은 시계의 맨 끝 위치 에서 이 루어 지 는 경우 가 많 습 니 다. 이때 헤드 포인터 가 표시 하 는 단일 순환 링크 는 편리 하지 않 고 꼬리 포인터 로 바 꿉 니 다.    rear 는 단일 순환 링크 를 표시 합 니 다.
  헤드 포인터 로 표 시 된 단일 순환 링크 에서 시작 점 을 찾 는 시간 은 O (1) 이 고 끝 점 을 찾 는 시간 은 O (n) 입 니 다.
  꼬리 포인터 로 표 시 된 단일 순환 링크 에서 시작 점 과 끝 점 을 찾 는 시간 은 모두 O (1) 입 니 다.
 
10. 결점 에 포인터 필드, prior | data | next 를 추가 합 니 다.형 성 된 링크 중 두 개의 서로 다른 방향의 체인 을 더 블 링크 라 고 부른다.
  1) 더 블 링크 의 앞 삽입 작업.시간 복잡 도 는 O (1) 이다.
Status ListInsert_DuL(DuLinkList &L, int i, ElemType e){
	if (!(p = GetElemP_DuL(L, i))) return ERROR;
	s = new DuLNode;
	s->data = e;
	s->prior = p->prior;
	p->prior->next = s;
	s->next = p;
	p->prior = s;
	return OK;
}

  2) 더 블 링크 의 삭제 작업.시간 복잡 도 는 O (1) 이다.
Status ListDelete_DuL(DuLinkList &L, int i, ElemType &e){
	if (!(p = GetElemP_DuL(L, i)))     
		return ERROR;
	e = p->data;
	p->prior->next = p->next;
	p->next->prior = p->prior;
	delete p;
	return OK;
}

11. 순서 표 와 링크 의 비교
  1) 공간 에 대한 고려: 순서 표 의 저장 공간 은 정적 으로 분배 되 고 링크 의 저장 공간 은 동적 으로 분배 된다.순서 표 의 저장 밀 도 는 링크 보다 크다.따라서 선형 표 의 길이 변화 가 크 지 않 고 미리 시간 을 정 하기 쉬 우 므 로 순서 표를 저장 구조 로 하 는 것 이 좋다.
  2) 시간 에 대한 고려: 순서 표 는 무 작위 액세스 구조 로 선형 표 의 조작 이 주로 검색 되 고 삽입, 삭제 작업 이 적 을 때 순서 표 구 조 를 사용 하 는 것 이 좋다.잦 은 삽입, 삭제 작업 을 하 는 선형 표 는 링크 를 사용 하 는 것 이 좋다.만약 에 조작 이 주로 표 의 처음 과 끝 에 발생 할 때 꼬리 지침 으로 표시 하 는 단일 순환 링크 를 사용한다.
 
12. 저장 밀도 = (노드 데이터 자체 가 차지 하 는 저장량) / (전체 노드 구조 가 차지 하 는 저장 총량)
저장 밀도: 순서 표 = 1, 체인 표 < 1.

좋은 웹페이지 즐겨찾기