数据结构(二)

#ifndef LINKLIST_H_INCLUDED
#define LINKLIST_H_INCLUDED

#include "ds.h" 

#ifndef ElemType
#define ElemType int 
#define ELEMTYPE_TAG
#endif

typedef struct LNode {
    ElemType data;
    struct LNode *next;
} LNode, *LinkList;
Status DestroyList(LinkList &L);
Status ClearList(LinkList &L);
bool ListEmpty(LinkList L);
int ListLength(LinkList L);
Status GetElem(LinkList L, int i, ElemType &e);
template <typename T> bool equal(T a, T b)
{
    return a==b;
}
int LocateElem(LinkList L, ElemType e, 
      bool (*compare)(ElemType,ElemType)=equal<ElemType>);
Status ListInsert(LinkList &L, int i, ElemType e);
Status ListDelete(LinkList &L, int i, ElemType &e);
Status ListTraverse(LinkList L, Status (*visit)(ElemType));
Status InitList(LinkList &L)
{
    L=(LNode*)malloc(sizeof(LNode));
    L->next=NULL;
        return OK;
}
Status DestroyList(LinkList &L)
{
    return ERROR;
}

Status ClearList(LinkList &L)
{
    L->next=NULL;
        return OK;
}
bool ListEmpty(LinkList L)
{
   
    if(!L->next)
         return OK;
}

int ListLength(LinkList L)
{
    LinkList P=L;
    int length=0;
    printf("开\n");
    while(P){
    length++;
        P=P->next;
    }
    
    return length;
}
Status GetElem(LinkList L, int i, ElemType &e)
{
    return ERROR; 
}

int LocateElem(LinkList L, ElemType e, bool (*compare)(ElemType,ElemType))
{
    LinkList p;
    int j=0;
    p = L->next; j = 1;
    while(p!=NULL) {
        if( compare(p->data,e) )  return j;
        j++;
        p=p->next;
        
    }
    return 0;
}
Status ListInsert(LinkList &L, int i, ElemType e)
{
    if(i<1&&i>ListLength(L))return ERROR;
         LinkList P=L;
    int length=1;
    while(length!=i){
    length++;
        P=P->next;
    }
    LinkList temp=(LNode*)malloc(sizeof(LNode));
    temp->next=P->next;
    temp->data=e;
    P->next=temp;
       return OK;
}
Status ListDelete(LinkList &L, int i, ElemType &e)
{
    if(i<1&&i>ListLength(L))return ERROR;
        LinkList P=L;
    int length=1;
    while(length!=i){
    length++;
        P=P->next;
    }
    LinkList temp=(LNode*)malloc(sizeof(LNode));
    temp=P->next;
    e=temp->data;
    P->next=temp->next;
        return  OK;
}

Status ListTraverse(LinkList L, Status (*visit)(ElemType))
{
    LinkList p = L->next;
    while (p) {
        if ( visit(p->data)==ERROR )  return ERROR;
        p = p->next;
    }
    return OK;
}


#ifdef ELEMTYPE_TAG
#undef ElemType
#undef ELEMTYPE_TAG
#endif

#endif  // LINKLIST_H_INCLUDED

转载于:https://www.cnblogs.com/ysy521/p/7577476.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值