C语言之双链表

  1. 双链表:

/***********双链表**********/
#include <stdio.h>
#include <stdlib.h>

typedef struct Dnode                          //双链表数据结构
{
    int data;
    struct Dnode *prior,*next;                //双链表的前驱节点和后继节点 
 }LinkList ;
 
LinkList *LinkList_Create(void)              //创建双链表函数 
{
    int n;
    LinkList *head,*end,*node;
    head=(LinkList *)malloc(sizeof(LinkList));
    head->prior=NULL;
    end=head;
    printf("请输入需要创建的双链表的大小:\n");
    scanf("%d",&n);
    printf("请依次输入%d个数值:\n",n); 
    while(n)
    {
        int data;
        node=(LinkList *)malloc(sizeof(LinkList));
        scanf("%d",&data);
        node->data=data; 
        end->next=node;
        node->prior=end;
        end=node;
        n--;
    }
    end->next=NULL;
    return head; 
 } 
 
 void LinkList_Insert(LinkList *head)                       //双链表的尾插法 
 {
     int data;
     LinkList *node,*temp;
     temp=head;
     node=(LinkList *)malloc(sizeof(LinkList));
     printf("请输入需要插入的数值:\n");
     scanf("%d",&data);
     node->data=data;
     while(temp->next!=NULL)
     {
         temp=temp->next;
     }
     temp->next=node;
     node->prior=temp;
     temp=node;
     temp->next=NULL;
  } 
 
LinkList *LinkList_Find(LinkList *head)
{
    int data;
    LinkList *node;
    node=head;
    printf("请输入需要查找的数值:\n");
    scanf("%d",&data);
    while(node->next!=NULL)
    {
        node=node->next;
        if(node->data==data)
        {
            printf("查找成功\n"); 
            return node; 
        } 
    }
    printf("查找失败\n"); 
    return NULL;
 } 
 
void LinkList_Change(LinkList *head)                                  //修改双链表节点的数值 
{
    int data;
    LinkList *node;
    node=LinkList_Find(head);
    printf("请输入需要修改的数值:\n");
    scanf("%d",&data);
    node->data=data;
    printf("修改成功\n");
}
 
void LinkList_Delete(LinkList *head)
{
    printf("双链表的删除操作\n");
    LinkList *temp;
    temp=LinkList_Find(head);
    temp->prior->next=temp->next;
    if(temp->next!=NULL)
    {
        temp->next->prior=temp->prior;
    }
    temp=NULL;
    free(temp);
 } 
 
 int main()
 {
     LinkList *start,*temp;
     temp=start=LinkList_Create();
     //LinkList_Insert(start);
     //temp=LinkList_Find(start);
     //printf("%d\n",temp->data);
     //LinkList_Change(start);
     LinkList_Delete(temp);
     while(start->next!=NULL)
     {
         start=start->next;
         printf("%d  ",start->data);
     }
     return 0; 
  } 
  1. 运行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值