0
点赞
收藏
分享

微信扫一扫

数据结构 通俗易懂版 c语言描述----双链表及其基本操作

 2022.2.6

双链表及其基本操作 

#include<stdio.h>
#include<stdbool.h>
#include<stdlib.h>

#define length 100
#define ElemType int

typedef struct DLnode
{
    ElemType data;
    struct DLnode *next;
    struct DLnode *prior;
}DLnode,*DlinkList;


bool InitList(DLnode **L){
   (*L)=(DLnode*)malloc(sizeof(DLnode));
   if(*L==NULL)
        return false;
   (*L)->next=NULL;
   (*L)->prior=NULL;
   (*L)->data=6;
   return true;
}

//尾插法创表
bool CreateDlistR(DLnode **L){
    DlinkList p=(*L);
    DlinkList r=p;
    int a;

    printf("input elem,q to quit:\n");
    while((scanf("%d",&a))==1){
        DlinkList s=(DLnode *)malloc(sizeof(DLnode));
        s->data=a;
        r->next=s;
        s->prior=r;
        r=s;
    }
        r->next=NULL;
    return true;
}

//插入结点算法 在p结点后插入s结点
bool InsertNextNode(DLnode *p,DLnode *s){
    if(p==NULL||s==NULL)
        return false;
    s->next=p->next;
    s->prior=p;
    if(p->next!=NULL){        //p不是最后一个结点
          p->next->prior=s;
    }
     p->next=s;
    return true;
}

//删除p结点的后继结点 
bool DeleteNextNode(DLnode *p){
    if(p==NULL)
        return false;
    DLnode *q=p->next;
    if(q->next!=NULL){             //q不为最后一个结点
         q->next->prior=p;
    }
    p->next=q->next;
    free(q);
    return true;
}

//查找第一个值为x的结点并返回结点指针 
DLnode * FindNode(DlinkList L,int x){
    DLnode *s=L->next;
    while(s!=NULL){
        if(s->data==x)
            return s;
        else
            s=s->next;
    }
        return NULL;
}


int main(){
    DlinkList L;
    InitList(&L);
}
举报

相关推荐

0 条评论