嵌入式学习-数据结构-Day4

Day4

思维导图

在这里插入图片描述

双向循环链表操作实现(多文件编译)

main.c

#include "head.h"
int main(int argc, const char *argv[])
{
        int n;
        datatype element;
        Doublelink head=NULL;
        printf("please enter n:");
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
                printf("please enter %d element:",i+1);
                scanf(" %c",&element);
        //      head=head_insert(head,element);
                head=tail_insert(head,element);
        }
        output(head);

//      head=head_delete(head);
//      output(head);

        head=tail_delete(head);
        output(head);
        return 0;
}

test.c

#include "head.h"
Doublelink create_node()
{
        Doublelink p=(Doublelink)malloc(sizeof(struct Node));
        if(NULL==p)
                return NULL;
        p->data='\0';
        p->next=p;
        p->priv=p;
        return p;
}

Doublelink head_insert(Doublelink head,datatype element)
{
        Doublelink s=create_node();
        if(NULL==s)
                return head;
        s->data=element;
        if(NULL==head)
        {
                head=s;
                return head;
        }
        Doublelink p=head->priv;
        s->next=head;
        head->priv=s;
        head=s;

        head->priv=p;
        p->next=head;
        return head;
}

void output(Doublelink head)
{
        if(NULL==head)
                return;
        Doublelink p=head;
        puts("===正向===");
        while(p->next!=head)
        {
                printf("%c\t",p->data);
                p=p->next;
        }
        printf("%c\t",p->data);
        puts("");
        puts("===反向===");
        do
        {
                printf("%c\t",p->data);
                p=p->priv;
        }while(p!=head->priv);
        puts("");
}

Doublelink tail_insert(Doublelink head,datatype element)
{
        Doublelink s=create_node();
        if(NULL==s)
                return head;
        s->data=element;
        if(NULL==head)
        {
                head=s;
                return head;
        }
        Doublelink p=head->priv;
        p->next=s;
        s->priv=p;
        s->next=head;
        head->priv=s;
        return head;
}

Doublelink head_delete(Doublelink head)
{
        if(NULL==head)
                return head;
        if(NULL==head->next)
                return NULL;
        Doublelink p=head;
        Doublelink q=head->priv;
        head=head->next;
        head->priv=q;
        q->next=head;
        free(p);
        p=NULL;
        return head;
}

Doublelink tail_delete(Doublelink head)
{
        if(NULL==head)
                return head;
        if(NULL==head->next)
                return NULL;
        Doublelink p=head->priv;
        Doublelink q=p->priv;
        q->next=head;
        head->priv=q;
        free(p);
        p=NULL;
        return head;
}

head.h

#ifndef __HEAD_H__
#define __HEAD_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef char datatype;
typedef struct Node
{
        datatype data;
        struct Node *priv;
        struct Node *next;
}*Doublelink;
Doublelink create_node();
Doublelink head_insert(Doublelink head,datatype element);
void output(Doublelink head);
Doublelink tail_insert(Doublelink head,datatype element);
Doublelink head_delete(Doublelink head);
Doublelink tail_delete(Doublelink head);
#endif

尾插图

在这里插入图片描述

头删图

在这里插入图片描述

尾删图

在这里插入图片描述

运行结果

尾插

在这里插入图片描述

头删

在这里插入图片描述

尾删

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值