嵌入式3-15

1、整理思维导图
2、整理课上单向循环链表的代码
3、完成双向链表的剩下四个功能

2、

node_p create_list()//创建链表
{
    node_p p=(node_p)malloc(sizeof(node));
    if(p==NULL)
    {
        printf("申请失败\n");
        return NULL;
    }
    p->len=0;
    p->next=p;
    return p;
}
node_p create_node(datatype data)//申请结点
{
    node_p p=(node_p)malloc(sizeof(node));
    if(p==NULL)
    {
        printf("申请失败\n");
        return NULL;
    }
    p->data=data;
    return p;
}
int empty_list(node_p p)//判空
{
    if(p==NULL)
        return -1;
    return p->len==0;
}
void insert_head(node_p p,datatype data)//头插
{
    if(p==NULL)
        return;
    node_p q=create_node(data);
    p->next=q;
    p->len++;
}
void dele_head(node_p p,datatype data)//头删
{
    if(p==NULL||empty_list(p))
        return;
    node_p q=p->next;
    p->next=q->next;
    free(q);
    q=NULL;
    p->len--;
}
void insert_tail(node_p p,datatype data)//尾插
{
    if(p==NULL)
        return;
    node_p q=p;
    while(p->next!=q)
    {
        p=p->next;
    }
    p->next=create_node(data);
    q->len++;
}
void dele_tail(node_p p)//尾删
{
    if(p==NULL||empty_list(p))
        return;
    node_p q=p;
    while(p->next->next!=q)
    {
        p=p->next;
    }
    free(p->next);
    p->next=q;
    q->len--;
}
void insert_pos(node_p p,datatype data,int pos)//按位置插入
{
    if(p==NULL||pos<0||pos>p->len-1)
        return;
    node_p q=p;
    for(int i=0;i<pos;i++)
    {
        p=p->next;
    }
    node_p r=p->next;
    p->next=create_node(data);
    p->next->next=r;
    q->len++;
}
void dele_pos(node_p p,int pos)//按位置删除
{
    if(p==NULL||empty_list(p)||pos<0||pos>p->len-1)
        return;
    node_p q=p;
    node_p r=p->next->next;
    for(int i=0;i<pos;i++)
    {
        p=p->next;
    }
    free(p->next);
    p->next=r;
    q->len--;
}
void show_list(node_p p)//输出
{
    if(p==NULL||empty_list(p))
        return;
    node_p q=p;
    p=p->next;
    while(p->next!=q)
    {
        printf("%d->",p->data);
        p=p->next;
    }
}
node_p DeleHead(node_p p)//删除头结点
{
    if(p==NULL)
        return NULL;
    node_p q=p;
    while(p->next!=q)
    {
        p=p->next;
    }
    p->next=q->next;
    free(q);
    q=NULL;
    return p->next;
}
void show_nohead_list(node_p p)//输出无头结点的链表
{
    node_p q=p;
    do{
         printf("%d->",p->data);
         p=p->next;
    }while(p!=q);
}

3、

相关推荐

  1. 嵌入学习记录15

    2024-03-16 17:38:02       46 阅读
  2. 嵌入学习日记 18

    2024-03-16 17:38:02       47 阅读
  3. 嵌入学习 Day17

    2024-03-16 17:38:02       50 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-16 17:38:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-16 17:38:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-16 17:38:02       87 阅读
  4. Python语言-面向对象

    2024-03-16 17:38:02       96 阅读

热门阅读

  1. 大数据开发(Hive面试真题-卷二)

    2024-03-16 17:38:02       44 阅读
  2. Crossing River

    2024-03-16 17:38:02       41 阅读
  3. 蓝桥杯刷题(八)

    2024-03-16 17:38:02       38 阅读
  4. C++/CLI学习笔记4(快速打通c++与c#相互调用的桥梁)

    2024-03-16 17:38:02       39 阅读
  5. KY54 打印极值点下标

    2024-03-16 17:38:02       50 阅读
  6. 【云原生】实战案列

    2024-03-16 17:38:02       33 阅读
  7. Telegraf--采集指定信息

    2024-03-16 17:38:02       44 阅读
  8. 独立服务器的优势

    2024-03-16 17:38:02       43 阅读
  9. 【黑马程序员】Python面向对象

    2024-03-16 17:38:02       37 阅读
  10. 【C语言】病人信息管理系统

    2024-03-16 17:38:02       48 阅读
  11. linux配置大数据环境

    2024-03-16 17:38:02       36 阅读