数据结构双链表操作

来源:互联网 发布:修改软件版权 编辑:程序博客网 时间:2024/05/16 14:05
#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef char ElemType;typedef struct DuLNode{    ElemType data;    struct DuLNode *prior;    struct DuLNode *next;}DuLinkList;int DuLink_ListInsertR(DuLinkList *L,ElemType e)//采用尾插法插入元素{    DuLinkList *p=L,*q;    while(p->next!=NULL)    {        p=p->next;    }    q=(DuLinkList *)malloc(sizeof(DuLinkList));    q->data=e;    q->prior=p;    p->next=q;    q->next=NULL;    return 1;}void DuLink_DispList(DuLinkList *L){    DuLinkList *p;    p=L->next;    while(p!=NULL)    {        printf("%c",p->data);        p=p->next;    }    printf("\n");}void DuLink_ListLength(DuLinkList *L){    DuLinkList *p;    p=L;    int i=0;    while(p->next!=NULL)    {        i++;        p=p->next;    }    printf("长度为: %d\n",i);}bool DuLink_ListEmpty(DuLinkList *L){    return(L->next==NULL);}bool DuLink_GetElem(DuLinkList *L,int i,ElemType &e){    int j=0;    DuLinkList *p;    p=L;    while(j<i &&p!=NULL)    {        j++;        p=p->next;    }    if(p==NULL)        return 0;    else    {        printf("%c\n",p->data);        return 1;    }}int DuLink_LocateElem(DuLinkList *L,ElemType e){    int i=1;    DuLinkList *p=L->next;    while(p!=NULL&&p->data!=e)    {        p=p->next;        i++;    }    if(p==NULL)        return 0;    else    {        printf("%d\n",i);        return 1;    }}void DuLink_ListInsert(DuLinkList *&L,int i,ElemType e){    DuLinkList *p,*q;    p=L;    int j=0;    while(j<i&&p!=NULL)    {        j++;        p=p->next;    }    p=p->prior;    q=(DuLinkList *)malloc(sizeof(DuLinkList));    q->data=e;    q->next=p->next;    q->prior=p;    p->next=q;}int DuLink_ListDestroy(DuLinkList *&L,int i,ElemType &e){    int j=0;    DuLinkList *p,*q;    p=L;    while(j<i&&p!=NULL)    {        j++;        p=p->next;    }    if(p==NULL)        return 0;    else    {        q=p;        p=p->prior;        p->next=q->next;        free(q);        return 1;    }}void DuLink_DestroyList(DuLinkList *&L){    DuLinkList *p,*q;    p=L;    q=p->next;    while(q!=NULL)    {        free(q);        p=q;        q=q->next;    }    free(p);}void DuLink_InitList(DuLinkList *&L){    L=(DuLinkList *)malloc(sizeof(DuLinkList));    L->prior=NULL;    L->next=NULL;}int main(){    DuLinkList *h;    ElemType e;    printf("双链表的基本运算如下:\n");    DuLink_InitList(h);    printf("初始化双链表h\n");    printf("依次采用尾插入法插入a,b,c,d,e元素\n");    DuLink_ListInsertR(h,'a');    DuLink_ListInsertR(h,'b');    DuLink_ListInsertR(h,'c');    DuLink_ListInsertR(h,'d');    DuLink_ListInsertR(h,'e');    printf("输出双链表h:\n");    DuLink_DispList(h);    printf("双链表h长度");    DuLink_ListLength(h);    printf("判断双链表h是为空\n");    DuLink_ListEmpty(h);    printf("输出双链表h的第3个元素\n");    DuLink_GetElem(h,3,e);printf("元素a的位置=%d\n",DuLink_LocateElem(h,'a'));printf("在第4个元素之后插入f元素\n");DuLink_ListInsert(h,4,'f');printf("输出双链表h:");DuLink_DispList(h);printf("删除h的第3个元素\n");DuLink_ListDestroy(h,3,e);printf("输出双链表h:");DuLink_DispList(h);printf("释放双链表h\n");DuLink_DestroyList(h);}

0 0