2015年大二上-数据结构-链表(4)-双链表算法库

来源:互联网 发布:淘宝100元左右的鼠标 编辑:程序博客网 时间:2024/06/14 11:09

DLinkList.h

/* *Copyright (c) 2014,烟台大学计算机学院 *All rights reserved. *文件名称:Annpion.cpp *作者:王耀鹏 *完成日期:2015年11月4日 *版本号:v1.0 * *问题描述:双链表算法库头文件。 *输入描述:无。 *输出描述:无。 */  #ifndef DLINKLIST_H_INCLUDED#define DLINKLIST_H_INCLUDEDtypedef int ElemType;typedef struct DLNode{    ElemType data;    struct DLNode *prior;    struct DLNode *next;}DLinkList;void CreateListF(DLinkList *&L,ElemType a[],int n);//头插法建双链表void CreateListR(DLinkList *&L,ElemType a[],int n);//尾插法建双链表void InitList(DLinkList *&L); //初始化双链表void DestroyList(DLinkList *&L); //销毁双链表bool ListEmpty(DLinkList *L); //判断链表是否为空int ListLength(DLinkList *L); //求链表的长度void DispList(DLinkList *L); //输出链表bool GetElem(DLinkList *L,int i,ElemType &e); //获取节点的值int LocateElem(DLinkList *L,ElemType e); //查找一个节点bool ListInsert(DLinkList *&L,int i,ElemType e) ;//插入一个节点bool ListDelete(DLinkList *&L,int i,ElemType &e); //删除一个节点#endif // DLINKLIST_H_INCLUDED

DLinkList.cpp

/**Copyright (c) 2014,烟台大学计算机学院*All rights reserved.*文件名称:Annpion.cpp*作者:王耀鹏*完成日期:2015年11月4日*版本号:v1.0**问题描述:双链表算法库源文件。*输入描述:无。*输出描述:无。*/#include "DLinkList.h"#include <malloc.h>#include <stdio.h>void CreateListF(DLinkList *&L,ElemType a[],int n){    DLinkList *p;    L=(DLinkList *)malloc(sizeof(DLinkList));    L->prior=L->next=NULL;    for(int i=0; i<n; ++i)    {        p=(DLinkList *)malloc(sizeof(DLinkList));        p->data=a[i];        p->next=L->next;        if(L->next!=NULL) L->next->prior=p;        L->next=p;        p->prior=L;    }}void CreateListR(DLinkList *&L,ElemType a[],int n){    DLinkList *q,*p;    L=(DLinkList *)malloc(sizeof(DLinkList));    L->next=L->prior=NULL;    q=L;    for(int i=0; i<n; ++i)    {        p=(DLinkList *)malloc(sizeof(DLinkList));        p->data=a[i];        q->next=p;        p->prior=q;        q=p;    }    q->next=NULL;}void InitList(DLinkList *&L){    L=(DLinkList *)malloc(sizeof(DLinkList));    L->next=L->prior=NULL;}void DestroyList(DLinkList *&L){    DLinkList *q,*p=L;    while(p!=NULL)    {        q=p->next;        free(p);        p=q;    }}bool ListEmpty(DLinkList *L){    return (L->next==NULL);}int ListLength(DLinkList *L){    DLinkList *p=L->next;    int i=1;    while(p->next!=NULL)    {        ++i;        p=p->next;    }    return i;}void DispList(DLinkList *L){    DLinkList *p=L->next;    while(p!=NULL)    {        printf("%d ",p->data);        p=p->next;    }    printf("\n");}bool GetElem(DLinkList *L,int i,ElemType &e){    DLinkList *p=L->next;    int j=1;    while(i>j && p!=NULL)    {        p=p->next;        ++j;    }    if(p==NULL)        return false;    else    {        e=p->data;        return true;    }}int LocateElem(DLinkList *L,ElemType e){    DLinkList *p=L->next;    int i=1;    while(p->data!=e && p!=NULL)    {        p=p->next;        ++i;    }    if(p==NULL)        return 0;    else return i;}bool ListInsert(DLinkList *&L,int i,ElemType e){    DLinkList *p=L->next,*q;    int j=1;    while(j<i-1 && p!=NULL)    {        p=p->next;        ++j;    }    if(p==NULL)        return false;    else    {        q=(DLinkList *)malloc(sizeof(DLinkList));        q->data=e;        q->next=p->next;        if(p->next!=NULL)        {            p->next->prior=q;        }        q->prior=p;        p->next=q;        return true;    }}bool ListDelete(DLinkList *&L,int i,ElemType &e){    DLinkList *p=L->next,*q;    int j=1;    while(j<i-1 && p!=NULL)    {        p=p->next;        ++j;    }    if(p==NULL)        return false;    else    {        q=p->next;        if(q==NULL)            return false;        e=q->data;        p->next=q->next;        if(q->next!=NULL)            q->next->prior=p;        free(q);        return true;    }}

main.cpp

/**Copyright (c) 2014,烟台大学计算机学院*All rights reserved.*文件名称:Annpion.cpp*作者:王耀鹏*完成日期:2015年11月4日*版本号:v1.0**问题描述:双链表算法库算法库采用程序的多文件组织形式。*输入描述:无。*输出描述:输出长度和插入数后的链表。*/#include <stdio.h>#include "DlinkList.h"int main(){    DLinkList *A;    ElemType a[]= {1, 3, 2, 9, 0, 4, 5 ,6, 7, 8};    InitList(A);    CreateListF(A, a, 10);    printf("length: %d\n", ListLength(A));    ListInsert(A, 4, 12);    printf("After Insert: ");    DispList(A);    DestroyList(A);    return 0;}

运行结果:


0 0
原创粉丝点击