数据结构——双链表

本文展示了如何使用C语言实现链表的数据结构,包括初始化链表、在头部插入元素、在尾部插入元素、删除指定元素以及打印链表内容。通过示例代码,演示了链表的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#include <stdlib.h>
typedef struct Node{
    int data;
    struct Node* pre;
    struct Node* next;
}MyNode;
 MyNode* initList(){
    MyNode* List=(MyNode*)malloc(sizeof(MyNode));
    List->data=0;
    List->next=NULL;
    List->pre=NULL;
    return List;
}
void headInsert(MyNode* List,int data){
   MyNode* node=(MyNode*)malloc(sizeof(MyNode));
   node->data=data;
   if(List->data==0){
       //链表为空
       node->next=List->next;
       node->pre=List;
       List->next=node;
   }else{
       node->pre=List;
       node->next=List->next;
       List->next->pre=node;
       List->next=node;
   }
   List->data++;
}
void tailInsert(MyNode* List,int data){
     MyNode* node=(MyNode*)malloc(sizeof(MyNode));
     node->data=data;
     List->data++;
     while(List->next){
         List=List->next;
     }
     List->next=node;
     node->next=NULL;
     node->pre=List;
 }
void delete(MyNode* List,int data){
     List->data--;
     List=List->next;
     while(List->data!=data){
         List=List->next;
     }
     if(List->next!=NULL){//判断删除的是否是尾节点
         List->pre->next=List->next;
         List->next->pre=List->pre;
     }else{
         List->pre->next=NULL;
     }
     free(List);
 }
void printList(MyNode* List){
    MyNode* node=List->next;
    while(node){
        printf("%d->",node->data);
        node=node->next;
    }
    printf("over!\n");
}
int main() {
    MyNode* list=initList();
    headInsert(list,1);
    headInsert(list,2);
    headInsert(list,3);
    headInsert(list,4);
    tailInsert(list,0);
    tailInsert(list,5);
    tailInsert(list,6);
    tailInsert(list,7);
    tailInsert(list,8);
    delete(list,0);
    delete(list,1);
    delete(list,4);
    delete(list,8);
    printList(list);
    printf("链表共有%d个节点",list->data);
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

karwen2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值