C语言学习

单链表demo:

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

typedef struct slist_note
{
    char data;
    struct slist_note *next;
}slist;

slist *creat_note(char data)
{
    slist *slist_n = calloc(1, sizeof(slist));
    slist_n->data = data;
    slist_n->next = NULL;
    return slist_n;
}

void slist_insert_head(slist *head, slist *n)
{
#if 1
    n->next = head->next;
    head->next = n;
#elif 
    slist *temp = NULL;
    temp = head;
    n->next = temp->next;
    temp->next = n;
#endif
}

void slist_insert_tail(slist *head, slist *n)
{
#if 0
    while(head->next)
    {
        head = head->next;
    }
    head->next = n;
    n->next = NULL;

#else
    slist *temp = NULL;
    temp = head;

    while(temp->next)
    {
        temp = temp->next;
    }
    temp->next = n;
    n->next = NULL;
#endif
}

void print_note(slist *head)
{
#if 0
    while(head->next)
    {
        printf("data:%d\n", head->data);
        head = head->next;
    }
    
    printf("data:%d\n", head->data);
#else 
    slist *temp = NULL;
    temp = head;
    
    while(temp->next)
    {
        printf("data:%d\n", temp->data);
        temp = temp->next;
    }
    
    printf("data:%d\n", temp->data);
#endif 
}

void slist_delet_data(slist *head, char data)
{
    slist *temp = NULL;
    slist *p = NULL;
    temp = head;

    while(temp->data != data)
    {
        p = temp; //指向当前节点
        temp = temp->next;
        if(!temp->next)
        {
            printf("data no find\n");
            return;
        }
    }
    
    printf("data:%d\n", temp->data);
    p->next = temp->next;
    free(temp);
}

//反转
void slist_turn(slist *head)
{
    slist *temp = NULL;
    slist *p = NULL;
    temp = head->next;

    if(!temp->next || !temp)
    {
        return;
    }

    while(temp->next)
    {
        p = temp->next;  //下个节点的下个节点

        if(temp == head->next)
        {
            temp->next = NULL;
        }
        else
        {
            temp->next = head->next;
        }
        head->next = temp;
        temp = p;  //走下个节点
    }    
    slist_insert_head(head, temp);
}

int main()
{
    slist *head_0 = creat_note(0);

    for(int i = 1; i < 5; i++)
    {
        slist_insert_tail(head_0, creat_note(i));
    }

    print_note(head_0);
    slist_delet_data(head_0,5);
    print_note(head_0);
    slist_turn(head_0);
    print_note(head_0);
   /* 我的第一个 C 程序 */
   printf("Hello, World! \n");
   
   return 0;
}

相关推荐

  1. C语言学习C语言

    2023-12-10 15:04:03       39 阅读
  2. C语言学习

    2023-12-10 15:04:03       64 阅读
  3. C语言学习笔记)

    2023-12-10 15:04:03       42 阅读
  4. C语言学习路线】

    2023-12-10 15:04:03       43 阅读
  5. C语言学习(练习题)

    2023-12-10 15:04:03       43 阅读

最近更新

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

    2023-12-10 15:04:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-10 15:04:03       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-10 15:04:03       87 阅读
  4. Python语言-面向对象

    2023-12-10 15:04:03       96 阅读

热门阅读

  1. qt:使用信号槽机制传参

    2023-12-10 15:04:03       63 阅读
  2. 数据结构之内部排序

    2023-12-10 15:04:03       44 阅读
  3. pandas常见问题汇总

    2023-12-10 15:04:03       63 阅读
  4. 使用python实现断点续传

    2023-12-10 15:04:03       48 阅读
  5. 特权FPGA学习笔记

    2023-12-10 15:04:03       55 阅读
  6. s3-dist-cp 介绍教程示例使用方法

    2023-12-10 15:04:03       49 阅读
  7. 机器人IC

    2023-12-10 15:04:03       48 阅读
  8. Spark DataFrame和Dataset使用例子

    2023-12-10 15:04:03       60 阅读