데이터 구조 - 선형 표 - 정적 링크 완전 실행 코드
/***************************************************************************
*
*
* ADT (List)
* Data
* {a1, a2, a3, ..., an}
* Operation
* InitList(*L); L.
* ListEmpty(L); L, true, false.
* ClearList(*L); L .
* GetElem(L, i, *e); L i e.
* LocateElem(L, e); L e , .
* , , 0 .
* ListInsert(*L, i, e); L i e.
* ListDelete(*L, i); L i .
* ListLength(L); L .
* ENDADT
*
*
* 0|a0| m| ---->
* 1|a1| 2|
* 2|a2| 3|
* .. ..
* i|ai| 0|
* .. ..
* max-1|an| 1| ---->
*
* :
* 2012-12-11 , , .
*/
/************************ data *********************/
#define MAXSIZE 1000 /* 1000 */
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
typedef int ElemType; /* ElemType , int */
typedef int Status; /* Status , */
/* */
typedef struct{
ElemType data;
int cur; /* (cursor) 0 */
}Component, StaticLinkList[MAXSIZE];
/***************************** operation *****************************/
/*
* : L 。
* : space
* cur 。
* cur ,
* 。
*/
Status InitList(StaticLinkList space)
{
int i;
for(i = 0; i < MAXSIZE - 1; i++){
space[i].cur = i + 1;
}
space[MAXSIZE - 1].cur = 0; /* , cur 0 */
return OK;
}
/*
* : L
* : , true, false
*/
Status ListEmpty(StaticLinkList L)
{
return (ListLength(L) == 0 ? TRUE : FALSE);
}
/* , , 0 */
int Malloc_SLL(StaticLinkList space)
{
int i = space[0].cur; /* cur ,
. */
/* ,
*/
if(space[0].cur)
space[0].cur = space[i].cur;
return i;
}
/*
* : L
* : L 0, 0
*
*/
void ClearList(StaticLinkList L)
{
int i;
i = L[MAXSIZE - 1].cur;
while(i){
L[i].data = 0;
ListDelete(L,i);
}
}
/*
* : L ,1 <= i <= ListLength(L)
* : e L i
*/
Status GetElem(StaticLinkList L, int i, ElemType *e)
{
int j;
int k;
j = L[MAXSIZE - 1].cur;
k = 1;
while(j && k < i){
j = L[j].cur;
k++;
}
if(!j || k > i)
return ERROR;
*e = L[j].data;
return OK;
}
/*
* : L .
* : L e , ,
* , 0
*/
Status LocateElem(StaticLinkList L, ElemType e)
{
int i = L[MAXSIZE - 1].cur;
while(i){
if (L[i].data == e)
return i;
i = L[i].cur;
}
return 0;
}
/*
* : L ,1 <= i <= ListLength(L)
* : L i e , L 1
*/
Status ListInsert(StaticLinkList L, int i, ElemType e)
{
int j;
int k;
int l;
k = MAXSIZE - 1; /* k , */
if(i < 1 || i > ListLength(L) + 1)
return ERROR;
j = Malloc_SLL(L); /* */
if(j){
L[j].data = e; /* data */
for(l = 1; l <= i - 1; l++) /* i */
k = L[k].cur;
L[j].cur = L[k].cur; /* i cur cur */
L[k].cur = j; /* i cur */
return OK;
}
return ERROR;
}
/* k , */
void Free_SLL(StaticLinkList space, int k)
{
space[k].cur = space[0].cur; /* cur cur */
space[0].cur = k; /* cur */
}
/*
* : L ,1 <= i <= ListLength(L)
* : L i e.
*/
Status ListDelete(StaticLinkList L, int i)
{
int j;
int k;
if (i < 1 || i > ListLength(L))
return ERROR;
k = MAXSIZE - 1;
for(j = 1; j <= i - 1; j++){ /* */
k = L[j].cur;
}
j = L[k].cur; /* */
L[k].cur = L[j].cur; /*
*/
Free_SLL(L, j);
return OK;
}
/*
* : L .
* : L .
*/
int ListLength(StaticLinkList L)
{
int j = 0;
int i = L[MAXSIZE - 1].cur;
while(i){
i = L[i].cur;
j++;
}
return j;
}
int main()
{
// ...
// StaticLinkList L;
// InitList(L);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.