带头结点的单链表的操作 学习总结

来源:互联网 发布:亚瑟士跑鞋推荐 知乎 编辑:程序博客网 时间:2024/06/07 05:51

带头结点的单链表的操作 学习总结

首先给出单链表的存储结构定义如下:

struct LNode{    Elemtype date;    LNode* next;};typedef LNode* LinkList;

下面是带头结点的单链表的基本操作:

初始化

// 构造一个空线性表Lvoid InitList(LinkList& L){    // 产生头结点,并使L指向该头结点    L = (LinkList)malloc(sizeof(LNode));    if(!L)    {        // 异常    }}

销毁线性表

// 前提:线性表L存在void DestroyList(LinkList& L){    LinkList q;    while(L)    {        q = L->next; // q指向头结点之后的第一个结点        free(L);        L = q; // L现在指向头结点之后的第一个结点    }}       

单链表置空

// 前提:单链表存在void ClearList(LinkList& L){    LinkList q = L->next; // q指向头结点之后的结点    L->next = NULL;    DestroyList(q);}

单链表判空

int ListEmpty(LinkList& L){    if (L->next)    {        return FALSE;    }    else    {        return TRUE;    }}   

求单链表的长度

// 前提:单链表存在int ListLength(LinkList L){    int length = 0;    LinkList q = L->next; // q指向头结点之后的结点    while(q)    {        length++;        q = q->next;    }    return length;}

根据索引查找元素

int GetElem(LinkList L, int Index, ElemType& Element){    int LoopId = 1;    LinkList q = L->next;    // 直到q指向第Index个结点或第Index个结点不存在    while(q && LoopId < Index)    {        LoopId++;        q = q->next;    }    if (!q || LoopId > Index)    {        return ERROR;    }    Element = q->data;    return OK;}

根据元素找索引

int LocateElem(LinkList L, ElemType Element){    int Index = 0;    LinkList q = L->next;    while(q)    {        Index++;        if(Element == L->data)        {            return Index;        }        q = q->next;    }    return 0;}

插入新元素

int ListInsert(LinkList L, int Index, ElemType Element){    int NumId = 0;    LinkList p = L;    LinkList s;    // 查找第Index - 1 个结点    while(p && NumId < Index - 1)    {        NumId++;        p = p->next;    }    if (!p || NumId > Index - 1)    {        return ERROR;    }    s = (LinkList)malloc(sizeof(LNode));    s->data = Element;    s->next = p->next;    p->next = s;    return OK;}

删除元素

int ListDelete(LinkList L, int Index, ElemType& Element){    int NumId = 0;    LinkList q, p = L;    // p指向第Index个结点的前驱    while(p->next && NumId < Index - 1)    {        NumId++;        p = p->next;    }    if(!p->next||j>i-1)         return ERROR;     q=p->next;    p->next=q->next;     e=q->data;     free(q);    return OK;}
0 0
原创粉丝点击