단 방향 순환 링크 (C + 구현)
5228 단어 데이터 구조
#include
#include
#define ERROR 0
#define OK 1
typedef int ElemType;
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
Status InitList_L(LinkList &L)
{
L=(LinkList)malloc(sizeof(LNode));
if(!L)
return ERROR;
L->next=L;
}
Status ClearList_L(LinkList &L)
{
struct LNode *p,*q;
if(L->next==L)
return OK;
p=L->next;
while(p!=L)
{
q=p->next;
free(p);
p=q;
}
L->next=L;
}
Status DestroyList_L(LinkList &L)
{
struct LNode *p,*q;
if(L==NULL)
return OK;
p=L->next;
while(p!=L)
{
q=p->next;
free(p);
p=q;
}
L->next=L;
free(L);
L=0;
return OK;
}
Status CreatList_LT(LinkList &L,int n)
{
L=(LinkList)malloc(sizeof(sizeof(LNode)));
L->next=L;
LinkList s=L;
for(int i=0;idata);
s->next=p;
s=p;
}
s->next=L;
return OK;
}
Status CreatList_LH(LinkList &L,int n)
{
L=(LinkList)malloc(sizeof(LNode));
L->next=L;
for(int i=n;i>0;i--)
{
LinkList p=(LinkList)malloc(sizeof(LNode));
scanf("%d",&p->data);
p->next=L->next;
L->next=p;
}
return OK;
}
bool ListEmpty_L(LinkList L)
{
if(L->next==L)
return true;
return false;//return(L->next==L)
}
Status ListLength_L(LinkList L)
{
int i=0;
LinkList p=L->next;
while(p!=L)
{
i++;
p=p->next;
}
return i;
}
Status GetElem_L(LinkList L,int i,ElemType &e)
{
LinkList p=L->next;
int j=1;
while(p!=L&&jnext;
j++;
}
if(j>i||p==L)
return ERROR;
e=p->data;
return OK;
}
bool compare(ElemType e1,ElemType e2)
{
if(e1==e2)
return true;
return false;
}
Status LocateElem_L(LinkList L,ElemType e,bool(*compare)(ElemType e1,ElemType e2))
{
int i=0;
LinkList p=L->next;
while(p!=L)
{
i++;
if(compare(p->data,e))
return i;
p=p->next;
}
return OK;
}
Status PriorElem_L(LinkList L,ElemType cur_e,ElemType &pre_e)
{
LinkList q,p=L->next;
while(p->next!=L)
{
q=p->next;
if(q->data==cur_e)
{
pre_e=p->data;
return OK;
}
p=q;
}
return ERROR;
}
Status NextElem_L(LinkList L,ElemType cur_e,ElemType &next_e)
{
LinkList p=L->next;
while(p->next!=L)
{
if(p->data==cur_e)
{
next_e=p->next->data;
return OK;
}
p=p->next;
}
return ERROR;
}
Status ListInsert_L(LinkList &L,int i,ElemType e)
{
LinkList p=L->next;
int j=1;
while(p!=L&&jnext;
j++;
}
if(p==L||j>i-1)
return ERROR;
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return OK;
}
Status ListDelete_L(LinkList &L,int i,ElemType &e)
{
LinkList p=L;
int j=0;
while(p->next!=L&&jnext;
j++;
}
if(p->next==L||j>i-1)
return ERROR;
LinkList q=p->next;
p->next=q->next;
e=q->data;
free(q);
return OK;
}
Status ListTraverse(LinkList L,Status(*visit)(ElemType))
{
LinkList p=L->next;
while(p!=L)
{
visit(p->data);
p=p->next;
}
return OK;
}
Status ListPrint_L(LinkList L)
{
LinkList p=L->next;
while(p!=L)
{
printf("%d ",p->data);
p=p->next;
}
printf("
");
}
int main()
{
LinkList L;
ElemType pre_e,next_e,e;
InitList_L(L);
if(ListEmpty_L(L))
printf(" L 。
");
else
printf(" L 。
");
printf(" L :%d
",ListLength_L(L));
CreatList_LT(L,6);
ListPrint_L(L);
if(ListEmpty_L(L))
printf(" L 。
");
else
printf(" L 。
");
printf(" L :%d
",ListLength_L(L));
/* ClearList_L(L);
if(ListEmpty_L(L))
printf(" L 。
");
else
printf(" L 。
");
printf(" L :%d
",ListLength_L(L));
printf(" :");
L?printf("L 。
"):printf("L 。
");
DestroyList_L(L);
printf(" :");
L?printf("L 。
"):printf("L 。
");*/
int i=4;
GetElem_L(L,i,e);
printf(" L %d :%d
",i,e);
e=8;
printf(" L %d compae() :%d
",e,LocateElem_L(L,e,compare));
PriorElem_L(L,e,pre_e);
printf(" L %d :%d
",e,pre_e);
NextElem_L(L,e,next_e);
printf(" L %d :%d
",e,next_e);
ListInsert_L(L,5,7);
ListPrint_L(L);
ListDelete_L(L,4,e);
ListPrint_L(L);
printf(" :%d
",e);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.