数据结构双向链表.C

双向链表

== >博主:墙角黑猫

< 1 > 原理解释:

   双向链表的理解是在每个节点之间存在双向的连接,例如和单链表对比:单链表是 A  -> B -> C -> D ->...
   每个节点是单向连接的,A只能指向B,从B无法直接到A。而双向链表是 A  <==> B <==> C <==> D <==>.... 
   这样就实现了A和B的完全互通。大家可以结合下图理解一下!!

在这里插入图片描述 < 2 > 代码部分:

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

#define OK 1;
#define ERROR 0;

typedef char ElemType;
typedef int Status;
typedef struct DualNode
{
    ElemType data;
    struct DualNode *prior;
    struct DualNode *next; 
}DualNode;
typedef struct DualNode* DuLinkList;


Status InitList(DuLinkList *L)
{
    DualNode *p,*q;
    int i;
    (*L) = (DuLinkList)malloc(sizeof(DualNode));
    if(!(*L))
    {
        return ERROR;
    }

    (*L) ->next = (*L)->prior = NULL;
    p = (*L);
    for(i=0; i<26; i++)
    {
        q = (DualNode *)malloc(sizeof(DualNode));
        if(!(q))
        {
            return ERROR;
        }
        q -> data = 'A' + i;
        q -> prior = p;
        q -> next = p -> next;
        p -> next = q;
        p = q;
    }
    p -> next =(*L) -> next;
    (*L) -> next -> prior = p;
    return OK;
}

void Caesar(DuLinkList *L, int i)
{
    if(i > 0)
    {
        do 
        {
            (*L) = (*L)->next;
        }while (--i);
    }
    if(i < 0)
    {
        do 
        {
            (*L) = (*L)->prior;
        }while (++i);
    }
}

int main()
{
    DuLinkList L;
    int i, n;

    InitList(&L);
    printf("小姐姐,请输入一个整数!!\n");
    scanf("%d", &n);
    Caesar(&L, n);

    for(i=0; i < 26; i++)
    {
        L = L -> next;
        printf("%c\t", L -> data);
    }
    printf("\n");

    return 0;

}

< 3 > 说明一下:
上面的代码是把图片中的prev换成了prior,其次上面的初始化函数(InitList())是作了两件事一件是申请地址第二件是构建连接相当于初始化和添加节点放到了一起,有的人话把他们分开来。第二个函数(Caesar())作了一件简单事,就不在这里说明了,大家可以根据代码自己理解!
每个人的实现代码可能千差万别,但是重要的还是能够自己理解并且构建出来,至于什么样性能好不好是初步掌握以后的是!最后的最后还是那句话,欢迎大家给出宝贵的意见。

< 4 > 超链接
Github
本文连接

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值