数据结构 通俗易懂版 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为最后一个结点就不用
          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);
    CreateDlistR(&L);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值