当前位置: 首页 > news >正文

数据结构D4作业

1.实现单向循环链表的功能

loop.c

#include "loop.h"
loop_p create_loop()
{
    loop_p H=(loop_p)malloc(sizeof(loop));
    if(H==NULL)
    {
        printf("创建失败\n");
        return NULL;
    }
    H->len=0;
    H->next=H;  
    return H;        
}

loop_p create_node(datatype data)
{
    loop_p new=(loop_p)malloc(sizeof(loop));
    if(new==NULL)
    {
        printf("空间申请失败\n");
        return NULL;
    }
    new->data=data;
    return new;
}

void insert_head(loop_p H,datatype data)
{
    if(H==NULL)
    {
        printf("入参为空\n");
        return;
    }
    loop_p new = create_node(data);
    new->next = H->next;
    H->next = new;
    H->len++;
}

void insert_pos(loop_p H,datatype data,int pos)
{
    if(H==NULL)
    {
        printf("入参为空\n");
        return;
    }
    loop_p p = H;
    for(int i=0;i<pos-1;i++)
    {
        p=p->next;
    }
    loop_p new=create_node(data);
    new->next=p->next;
    p->next=new;
    H->len++;
}

void del_tail(loop_p H)
{
    if(H==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    loop_p temp = H;
    while(temp->next->next!=H)
    {
        temp=temp->next;
    }
    loop_p del=temp->next;
    temp->next=temp->next->next;
    free(del);
    H->len--;
}

void del_pos(loop_p H,int pos)
{
    if(H==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(pos<=0||pos>H->len)
    {
        printf("位置不合理\n");
        return;
    }
    loop_p temp=H;
    for(int i=0;i<pos-1;i++)
    {
        temp=temp->next;
    }
    loop_p del=temp->next;
    temp->next=temp->next->next;
    free(del);
    H->len--;
}

void out_put_loop(loop_p H)
{
    if(H==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    loop_p p = H->next;
    while(p!=H)
    {
        printf("%d\t",p->data);
        p=p->next;
    }
    putchar(10);
}

main.c


#include "loop.h"
int main()
{
    loop_p H=create_loop();
    insert_head(H,4);
    insert_head(H,3);
    insert_head(H,2);
    insert_head(H,1);
    del_tail(H);
    del_pos(H,2);
    out_put_loop(H);
    return 0;
}

2.思维导图

见上一次作业

3.重写一遍链表逆置函数

void ovtu_link(link_p H)
{
    if(H==NULL)
    {
        printf("入参为空,请检查\n");
        return;
    }
    if(link_empty(H))
    {
        printf("链表为空\n");
        return;
    }
    if(H->next->next==NULL)
    {
        printf("表中只有一个元素,无需翻转\n");
        return;
    }
    link_p p = H->next->next;
    H->next->next = NULL;
    link_p q = p->next;
    while(p!=NULL)
    {
        p->next=H->next;
        H->next=p;    
        p=q;
        if(q!=NULL)
        {
            q=q->next;
        }
    }
}

http://www.lryc.cn/news/305120.html

相关文章:

  • springboot750人职匹配推荐系统
  • 【笔记】【开发方案】APN 配置参数 bitmask 数据转换(Android KaiOS)
  • Redis篇之缓存雪崩、击穿、穿透详解
  • 【深度学习笔记】3_2线性回归的从零实现
  • Apache Maven简介
  • #12解决request中getReader()和getInputStream()只能调用一次的问题
  • 直接插入排序+希尔排序+冒泡排序+快速排序+选择排序+堆排序+归并排序+基于统计的排序
  • Java高级 / 架构师 场景方案 面试题(二)
  • C/C++内存管理学习【new】
  • 选择适合你的编程语言
  • 【力扣每日一题】力扣106从中序和后序遍历序列构造二叉树
  • logback日志回滚原理
  • [C#]winform基于opencvsharp结合pairlie算法实现低光图像增强黑暗图片变亮变清晰
  • React18源码: reconcliler启动过程
  • 【RN】为项目使用React Navigation中的navigator
  • CS50x 2024 - Lecture 8 - HTML, CSS, JavaScript
  • C++:派生类的生成过程(构造、析构)
  • 金蝶字段添加过滤条件
  • SQLite 知识整理
  • 0基础JAVA期末复习最终版
  • 【办公类-16-07-04】合并版“2023下学期 中班户外游戏(有场地和无场地版,一周一次)”(python 排班表系列)
  • chat GPT第一讲
  • JAVA工程师面试专题-Mysql篇
  • vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
  • 编程笔记 Golang基础 022 数组
  • 【kubernetes】二进制部署k8s集群之,多master节点负载均衡以及高可用(下)
  • 哈希表在Java中的使用和面试常见问题
  • LeetCode刷题小记 三、【哈希表】
  • Zookeeper选举Leader源码剖析
  • Redis(十六)缓存预热+缓存雪崩+缓存击穿+缓存穿透