单向链表的操作

来源:互联网 发布:系统仿真软件arena 编辑:程序博客网 时间:2024/05/22 02:42

       单向链表的操作,代码根据严蔚敏版<数据结构>进行编写,代码如下

#include <malloc.h>#include <stdlib.h>#include <stdio.h>typedef enum Status{    OK,    ERROR,} Status;typedef int ElemType;typedef struct LNode{    ElemType data;    struct LNode *next;} LNode,*LinkList;void printf_L(const LinkList &L){    LinkList p;    p = L->next;    if(L->next)        while(p)        {            printf("%d ",p->data);            p = p->next;        }    printf("\n");}Status GetElem_L(LinkList &L,int i,ElemType &e){    LinkList p;    int j = 1;    p = L->next;    while(p&&j<i)    {        p = p->next;        ++j;    }    if(!p || j > i)        return ERROR;    e = p->data;    printf("%d",e);    return OK;}Status ListInsert_L(LinkList &L,int i,ElemType &e){    LinkList p = L;    int j = 0;    while(p &&j< i - 1)    {        p = p->next;        ++j;    }    if(!p || j > i - 1)        return ERROR;    LinkList s = (LinkList)malloc(sizeof(LNode));    s->data = e;    s->next = p->next;    p->next = s;    return OK;}Status ListDelete_L(LinkList &L,int i,ElemType &e){    LinkList p = L;    int j = 0;    while(p->next && j < i - 1 )    {        p = p->next;        ++j;    }    if(!(p->next) ||j > i -1)        return ERROR;    LinkList q;    q = p->next;    p->next = q->next;    e = q->data;    free(q);    return OK;}void CreateList_L(LinkList &L,int n){    L = (LinkList)malloc(sizeof(LNode));    L->next = NULL;    int i;    for(i = n; i >0; --i)    {        LinkList p = (LinkList)malloc(sizeof(LNode));        scanf("%d",&p->data);        p->next = L->next;        L->next = p;    }}Status DestoryList(LinkList &L){    LinkList p;    if(!L)      return ERROR;    while(L)    {        p = L->next;        free(L);        L=p;    }    return OK;}void MergeList_L(LinkList &La,LinkList &Lb,LinkList &Lc){    LinkList pa = La->next;    LinkList pb = Lb->next;    LinkList pc;    Lc = pc = La;    while(pa && pb)    {        if(pa->data <= pb->data)        {            pc->next = pa;            pc = pa;            pa = pa->next;        }        else        {            pc->next = pb;            pc = pb;            pb = pb->next;        }    }    pc->next = pa?pa:pb;    free(Lb);}int main(){    LinkList La,Lb,Lc;    CreateList_L(La,5);    printf_L(La);    CreateList_L(Lb,4);    printf_L(Lb);    MergeList_L(La,Lb,Lc);    printf_L(Lc);    DestoryList(Lc);    return 0;}

代码说明:需要用c++编译器进行编译,c编译器不支持引用类型。

0 0