线性表的双向链表存储结构

#include <stdio.h>
#include <stdlib.h>
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct LNode{
    ElemType data;
    struct LNode *next;
    struct LNode *prior;
}DNode,*DLinkList;

void CreateList_L(DLinkList *L,int n);
Status GetElem_L(DLinkList L,int i,ElemType *e);
Status ListInsert_L(DLinkList L,int i,ElemType e);

int main(int argc, const char * argv[]) {
    DLinkList L,p;
    CreateList_L(&L, 5);
    int e=3;
    ListInsert_L(L,2,e);
    p=L->next;
    while (p) {
        printf("%d ",p->data);
        p=p->next;
    }
    return 0;
}

void CreateList_L(DLinkList *L,int n){
    (*L)=(DLinkList)malloc(sizeof(DNode));
    (*L)->next=NULL;
    (*L)->prior=NULL;
    DLinkList p;
    for (int i=n; i>0; --i) {
        p=(DLinkList)malloc(sizeof(DNode));
        scanf("%d",&p->data);
        p->next=(*L)->next;
        if ((*L)->next != NULL)
            (*L)->next->prior=p;
        (*L)->next=p;
        p->prior=(*L);
    }
}

Status GetElem_L(DLinkList L,int i,ElemType *e){
    DLinkList p=L->next;
    int j=1;
    while (p&&j<i) {
        p=p->next;++j;
    }
    if(!p||j>i)
        return ERROR;
    *e = p->data;
    return OK;
}

Status ListInsert_L(DLinkList L,int i,ElemType e){
    DLinkList p=L,s;
    int j=0;
    while (p&&j<i-1) {
        p=p->next;
        ++j;
    }
    if(!p||j>i-1)
        return ERROR;
    s=(DLinkList)malloc(sizeof(DNode));
    s->data=e;
    s->next=p->next;
    if (p->next != NULL)
        p->next->prior=s;
    p->next=s;
    s->prior=p;
    return OK;
}

猜你喜欢

转载自blog.csdn.net/qq_40215528/article/details/83063785