数据结构笔记---单链表

来源:互联网 发布:在线ftp源码 编辑:程序博客网 时间:2024/04/28 04:23

继续。。。

因为几个while里忘记更新指针。调试了好久!!!!

烦死了

需要注意的地方。。。

InitList_L函数的参数必须是LinkList* L

即LNode**。

因为InitList_L函数不仅要改变L指向的内容,还要改变L的指向,

若不用LinkList*  L 。则无法改变L的指向!

#ifndef __LINKLIST__H__#define __LINKLIST__H__#include <stdio.h>#include <malloc.h>#define ElemType inttypedef enum {    OK,    NO,    OVERFLOW}Status;typedef struct LNode {    ElemType data;    struct LNode *next;}LNode, *LinkList;Status InitList_L(LinkList *L) {    if( !(*L = (LinkList)malloc(sizeof(LNode))) ) {        return OVERFLOW;    }    (*L)->next = NULL;    return OK;}void DestroyList_L(LinkList L) {    LNode *pL = L;    while (pL->next) {        LNode *temp = pL->next;        free(pL);        pL = temp;    }    free(pL);}void ClearList_L(LinkList L) {    LNode *pL = L;    while (pL->next) {        LNode *temp = pL->next;        free(pL);        pL = temp;    }}Status ListEmpty_L(LinkList L) {    if (NULL == L->next) {        return OK;    }    return NO;}int ListLength_L(LinkList L) {    int count = 0;    LNode *pL = L;    while (NULL != pL->next) {        ++count;        pL = pL->next;    }    return count;}Status ListInsert_L(LinkList L, int i, ElemType e) {    int length = ListLength_L(L);    if (i < 1 || i > length + 1) {        return OVERFLOW;    }    //pL points to the element which we will insert the e after it    LNode *pL = L;    while (--i) {        pL = pL->next;    }    LNode *temp = (LNode *)malloc(sizeof(LNode));    if (!temp) {        return OVERFLOW;    }    temp->data = e;    temp->next = pL->next;    pL->next = temp;    return OK;}Status ListDelete_L(LinkList L, int i, ElemType *e) {    int length = ListLength_L(L);    if (i < 1 || i > length) {        return OVERFLOW;    }    LNode *pL = L;    while (--i) {        pL = pL->next;    }    *e = pL->next->data;    pL->next = pL->next->next;    return OK;}Status GetElem_L(LinkList L, int i, ElemType *e) {    int length = ListLength_L(L);    if (i < 1 || i > length) {        return OVERFLOW;    }    LNode *pL = L;    while (--i) {        pL = pL->next;    }    *e = pL->next->data;    return OK;}int LocateElem_L(LinkList L, ElemType e) {    int count = 1;    LNode *pL = L->next;    while (pL) {        if (e == pL->data) {            return count;        }        ++count;        pL = pL->next;    }    return 0;}Status PriorElem_L(LinkList L, ElemType cur_e, ElemType *pre_e) {    int loc = LocateElem_L(L, cur_e);    if (0 == loc || 1 == loc) {        return OVERFLOW;    }    GetElem_L(L, loc - 1, pre_e);    return OK;}Status NextElem_L(LinkList L, ElemType cur_e, ElemType *next_e) {    int loc = LocateElem_L(L, cur_e);    if (0 == loc ||ListLength_L(L) == loc) {        return OVERFLOW;    }    GetElem_L(L, loc + 1, next_e);    return OK;}void ListTraverse_L(LinkList L, void (*visit)(ElemType)) {    LNode *pL = L->next;    while (pL) {        visit(pL->data);        pL = pL->next;    }}#endif


原创粉丝点击