제1 부분 선형 표 의 체인 식 저장 소 (二) -- 무 두 결점
선두 결점 을 가 진 단일 체인 표 에 비해 선두 결점 을 가지 지 않 은 단일 체인 표 는 직관 적 이지 만 첫 번 째 요 소 를 삽입 하고 삭제 할 때 다른 요 소 를 삽입 하고 삭제 하 는 작업 은 다르다.그리고 결점 이 있 는 단일 체인 표 의 조작 은 모두 통일 되 었 다.
노드 가 없 는 단일 체인 시트 기본 동작:
/*초기 화 * /
/*빈 테이블 로 초기 화 * /
/*빈 표 인지 아 닌 지 판단 * /
/*데이터 요소 의 개 수 를 되 돌려 줍 니 다 * /
/*i 번 째 요소 가 존재 할 때 e 에 값 을 부여 하고 OK 를 되 돌려 줍 니 다. 그렇지 않 으 면 ERROR * /
/*링크 의 첫 번 째 e 와 copare 관 계 를 만족 시 키 는 데이터 요 소 를 되 돌려 주 는 순서 * /
/*앞장 서지 않 는 단일 체인 시트 의 i 번 째 위치 에 요소 e * / 를 삽입 합 니 다.
/*대여 점 이 없 는 단일 체인 시트 에서 i 번 째 요 소 를 삭제 합 니 다 * /
/*표 의 모든 요소 호출 함수 visit * /
/*약 cure 는 링크 의 요소 이 고 첫 번 째 가 아 닙 니 다. pre 로e. 전구 로 돌아 가 OK 로 돌아 가 는 데 성 공 했 습 니 다. false 로 돌아 가 는 데 실 패 했 습 니 다 * /
/*약 crue 는 링크 의 요소 이 고 마지막 이 아 닙 니 다. next 로e. 그 후 계 를 되 돌려 줍 니 다. OK 를 성공 적 으로 되 돌려 주 었 습 니 다. 실 패 는 false * / 를 되 돌려 줍 니 다.
/ 、 ( )
/* */
void InitList(pLinkList L)
{
L = NULL;
}
/* */
void ClearList(pLinkList L)
{
pLinkList p;
while(p)
{
p = L;
L = p->next;
free(p);
}
}
/* */
Status ListEmpty(pLinkList L)
{
if(L)
return FALSE;
else
return TRUE;
}
/* */
int ListLength(pLinkList L)
{
int i = 0;
pLinkList p = L;
while(p)
{
i++;
p = p->next;
}
return i;
}
/* i , e, OK, ERROR*/
Status GetElem(pLinkList L,int i,elemtype *e)
{
int j = 1;
pLinkList p;
while(j<i && p)
{
p = p->next;
j++;
}
if(i == j && p)
{
*e = p->data;
return OK;
}
return ERROR;
}
/* e compare */
int LocateElem(pLinkList L,elemtype e,Status(*compare)(elemtype,elemtype))
{ // :
int i = 1; // int i =0;
pLinkList p = L; // pLinkList p =L;
while(p && !compare(p->data,e)) // while(p)
{ // { i++;
i++; // if(compare(p->next,e))
p = p->next; // return i;
} // p = p->next;
if(p) // }
return i; // return 0;
return 0;
}
/* i e*/
// 《 》 , 31
// ?
Status ListInsert
(pLinkList L
,
int i
,elemtype e
)
{
int j
= 1
;
pLinkList s
,p
=L
;
if
(i
<1
)
return
ERROR
;
s
=
(pLinkList
)
malloc
(
sizeof
(LinkList
)
)
;
s
-
>data
= e
;
if
(i
=
= 1
)
//i=1 。
{
s
-
>next
= L
;
L
= s
;
}
else
{
while
(p
&
&j
<i
-1
)
// i-1
{
j
+
+
;
p
= p
-
>next
;
}
if
(
!p
)
return
ERROR
;
s
-
>next
= p
-
>next
;
p
-
>next
= s
;
}
return OK
;
}
/* , , !
, i 1 , return , s ,
s , 。
, return ERROR; free(s) , 。*/
/* i , e */
Status ListDelete(pLinkList L,int i,elemtype * e)
{
int j = 1;
pLinkList q,p = L;
if(!p)
return ERROR;
else if (i == 1)
{
L = p->next;
*e = p->data;
free(p);
}
else
{
while(!p->next && j<i-1)//p , i-1 , i
{
j++;
p = p->next;
}
if(!p->next || j>i-1) // i<1 i
return ERROR;
q = p->next; //q
*e = q->data;
p->next = q->next;
free(q);
}
return OK;
}
/* visit*/
void ListTraverse(pLinkList L,void(*visit)(elemtype *))
{
pLinkList p = L;
while(p)
{
visit(&p->data);
p = p->next;
}
}
/* cur_e , , pre_e , OK, false*/
Status PriorElem(pLinkList L,elemtype cur_e,elemtype *pre_e)
{
pLinkList p = L;
while(!p->next)
{
if(p->next->data == cur_e)
{
*pre_e = p->data;
return OK;
}
p = p->next;
}
return ERROR;
}
/* cru_e , , next_e , OK, false*/
Status NextElem(pLinkList L,elemtype cur_e,elemtype *next_e)
{
pLinkList p = L;
while(!p->next)
{
if(p->data == cur_e)
{
*next_e = p->next->data;
return OK;
}
p = p->next;
}
return ERROR;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.