单链表的各种基本运算

来源:互联网 发布:配眼镜的数据 编辑:程序博客网 时间:2024/05/20 05:06

 输入代码:


/*实验题2-2*/#include<stdio.h>#include<stdlib.h>typedef char ElemType;typedef struct LNode{    ElemType data;    struct LNode *next;} LinkList;//使用头插法void CreateListF(LinkList *&L,ElemType a[],int n){    LinkList *s;    int i;    L=(LinkList *)malloc(sizeof(LinkList));    L->next=NULL;    for(i=0; i<n; i++)    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=a[i];        s->next=L->next;        L->next=s;    }}//使用尾插法void CreateListR(LinkList *&L,ElemType a[],int n){    LinkList *s,*r;    int i;    L=(LinkList *)malloc(sizeof(LinkList));    r=L;    for(i=0; i<n; i++)    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=a[i];        r->next=s;        r=s;    }    r->next=NULL;}//初始化线性表void InitList(LinkList *&L){    L=(LinkList *)malloc(sizeof(LinkList));    L->next=NULL;}//销毁线性表void DestroyList(LinkList *&L){    LinkList *pre=L,*p=L->next;    while(p!=NULL)    {        free(pre);        pre=p;        p=pre->next;    }    free(pre);}//判断线性表是否为空表bool ListEmpty(LinkList *L){    return (L->next==NULL);}//求线性表的长度int ListLength(LinkList *L){    int n=0;    LinkList *p=L;    while(p->next!=NULL)    {        n++;        p=p->next;    }    return (n);}//输出线性表void DispList(LinkList *L){    LinkList *p=L->next;    while(p!=NULL)    {        printf("%c",p->data);        p=p->next;    }    printf("\n");}//求线性表中某个数据元素值bool GetElem(LinkList *L,int i,ElemType &e){    int j=0;    LinkList *p=L;    while(j<i&&p!=NULL)    {        j++;        p=p->next;    }    if(p==NULL)        return false;    else    {        e=p->data;        return true;    }}//按元素值查找int LocateElem(LinkList *L,ElemType e){    int i=1;    LinkList *p=L->next;    while(p!=NULL&&p->data!=e)    {        p=p->next;        i++;    }    if(p==NULL)        return (0);    else        return(i);}//插入数据元素bool ListInsert(LinkList *&L,int i,ElemType e){    int j=0;    LinkList *p=L,*s;    while(j<i-1&&p!=NULL)    {        j++;        p=p->next;    }    if(p==NULL)        return false;    else    {        s=(LinkList *)malloc(sizeof(LinkList));        s->data=e;        s->next=p->next;        p->next=s;        return true;    }}//删除数据元素bool ListDelete(LinkList *&L,int i,ElemType &e){    int j=0;    LinkList *p=L,*q;    while(j<i-1&&p!=NULL)    {        j++;        p=p->next;    }    if(p==NULL)        return false;    else    {        q=p->next;        if(q==NULL)            return false;        e=q->data;        p->next=q->next;        free(q);        return true;    }}int main(){    LinkList *L;    char s[5]= {'a','b','c','d','e'};    char e;    int i,j;    InitList(L);//初始化单链表    CreateListR(L,s,5);//使用尾插法建立单链表    DispList(L);//输出单链表    ListLength(L);//求单链表的长度    i=ListEmpty(L);    if(i==0)    {        printf("该单链表不为空\n");    }    else    {        printf("该单链表为空\n");    }    e=GetElem(L,3,e);    printf("第三个元素为:%c\n",e);    j=LocateElem(L,'a');//输出a的位置    printf("元素a为第%d个元素\n",j);    ListInsert(L,4,'f');//插入元素f到第四个元素    DispList(L);//输出线性表L    ListDelete(L,3,e);//删除第三个元素    DispList(L);//输出单链表L    DestroyList(L);//销毁释放单链表}


运行结果:




0 0
原创粉丝点击