LinkList 의 구체 적 인 실현
3890 단어 데이터 구조
#include
#include
using namespace std;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int ElemType;
typedef int Status;
typedef struct LNode
{
ElemType data;
struct LNode* next;
}LNode ,*LinkList;
/*typedef struct{
Link head,tail;
int len;
}LinkList;*/
// L
Status InitList_L(LinkList& L)
{
L = (LNode*)malloc(sizeof(LNode));
if (!L)
exit(OVERFLOW);
L->next = NULL;
return OK;
}
// L
Status DestroyList_L(LinkList& L)
{
LinkList q;
while (L)
{
q = L->next;
free(L);
L = q;
}
return OK;
}
// L
Status ClearList_L(LinkList& L)
{
LinkList p=L->next, q;
while (p)
{
q = p->next;
free(p);
p = q;
}
L->next = NULL;
return OK;
}
// L
Status ListEmpty_L(LinkList L)
{
if (NULL == L->next)
return TRUE;
else
return FALSE;
}
// L
int ListLength_L(LinkList L)
{
LinkList p = L->next;
int i;
for ( i = 0; p; p = p->next)
++i;
return i;
}
// e L i
Status GetElem_L(LinkList L, int i, ElemType& e){
LinkList p=L->next;
int j=0;
while(p||jnext;++j;
}
if(!p||j>i) return ERROR;
e=p->data;
return OK;
}
// , :a=b
Status compare(ElemType a, ElemType b){
if(a==b) return TRUE;
else return FALSE;
}
// L e compare() ; , 0
Status LocateElem_L(LinkList L, ElemType e, Status(*compare)(ElemType, ElemType))
{ int i=1;
LinkList p=L->next;
while(p&&!(*compare)(e,p->data))
{
p=p->next; i++;
}
if(!p) return 0;
return i;
}
// cur_e L , , pre_e , ,pre_e
Status PriorElem_L(LinkList L,ElemType cur_e,ElemType& pre_e){
LinkList p=L->next,q;
while(p&&p->next)
{
q=p->next;
if(cur_e==q->data) { pre_e=p->data; return OK;}
p=q;
}
return INFEASIBLE;
}
// cur_e L , next_e , ,next
Status NextElem_L(LinkList L,ElemType cur_e,ElemType& next_e){
LinkList p=L->next,q;
if(p)
{
while(p->next)
{
q=p->next;
if(cur_e==p->data) { next_e=q->data;return OK;}
p=q;
}
}
return INFEASIBLE;
}
// i e, L
Status ListInsert_L(LinkList& L,int i,ElemType e){
LinkList p=L; int j=0;
while(p&&jnext;j++;}
if(!p||j>i-1) return ERROR;
LinkList s=(LinkList)malloc(sizeof(LNode));
s->data=e; s->next=p->next;p->next=s;
return OK;
}
// L i 。 e , L
Status ListDelete_L(LinkList& L,int i,ElemType e){
LinkList p=L,q;int j=0;
while(p&&jnext;j++;}
if(!p||jnext; p->next=q->next;e=q->data; free(q);
return OK;
}
//
Status visit(ElemType i){
if(cout<next;
while (p)
{
if (!visit(p->data))
return INFEASIBLE;
p = p->next;
}
return OK;
}
int main(void)
{
LinkList L;
InitList_L(L);
for (int i = 1, j = 1; i < 20;++j, i += 2)
ListInsert_L(L, j, i);
cout << " L :" << endl;
cout << "*******************************************" << endl;
cout << " :" << ListLength_L(L)<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.