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;
    end=head=(LinkList *)malloc(sizeof(LinkList));
    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=head;                                       //尾指针的next指向头节点 
    head->prior=end;                                     //头节点的prior指向尾节点,形成环 
    return head;
 } 

void LinkList_Insert(LinkList *head)                      //循环双链表的尾插法 
{
    int data;
    LinkList *node,*temp;
    temp=(LinkList *)malloc(sizeof(LinkList)); 
    node=head->prior;
    printf("请输入需要插入的数值:\n");
    scanf("%d",&data);
    temp->data=data;
    node->next=temp;
    temp->prior=node;
    node=temp;
    node->next=head;
} 
 
LinkList *LinkList_Find(LinkList *head)              //按值查找节点 
{
    int data;
    LinkList *node;
    node=head;
    printf("请输入需要查找的数值:\n");
    scanf("%d",&data);
    while(node->next!=head)
    {
        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("%d\n",node->data);
}

void LinkList_Delete(LinkList *head)
{
    printf("循环双链表的删除操作:\n");
    LinkList *node;
    node=LinkList_Find(head);
    node->prior->next=node->next;
    node->next->prior=node->prior;
    node=NULL;
    free(node);
 } 
 
int main()
{
    LinkList *start,*temp,*find;
    temp=start=LinkList_Create();
    LinkList_Insert(start);
    //find=LinkList_Find(start);
    //LinkList_Change(start);
    LinkList_Delete(start);
    //printf("%d\n",find->data);
    while(start->next!=temp)
    {
        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、付费专栏及课程。

余额充值