c程序写的循环链表并实现增删改查

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


#define MY_DEBUG 1 
#if  MY_DEBUG
#define myDebug(fmt, ...) printf("[fun:%s - line:%d] " fmt,  __FUNCTION__, __LINE__, ##__VA_ARGS__)
#else
    #define myDebug(fmt, ...)
#endif


// 定义节点结构体
typedef struct Node {
    int data;
    struct Node* next;
} Node;

// 创建一个新的节点
Node* createNode(int value) 
{
    myDebug("Node len=%d\n",sizeof(Node));
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = value;
    newNode->next = newNode;  // 初始时指向自己,形成循环
    return newNode;
}

// 在链表的尾部插入节点
void insert(Node** head, int value) 
{
    Node* newNode = createNode(value);
    if (*head == NULL)//如果还没有给头申请内存空间
    {
        
        *head = newNode;
        myDebug("p of head=%p\n",head);
    } 
    else 
    {
        Node* temp = *head;
        myDebug("p of head=%p\n",*head);
        myDebug("p of temp->next=%p\n",temp->next);
        while (temp->next != *head)//遍历找到链表尾部
        {                
            temp = temp->next;   
            myDebug("p of temp->next=%p\n",temp->next);      
        }
        myDebug("p of temp=%p\n",temp);
        temp->next = newNode;
        myDebug("p of temp->next=%p\n",temp->next);
    }
    newNode->next = *head;  // 形成循环
    //myDebug("p of head=%p\n",head);
}

// 删除指定值的节点
void deleteNode(Node** head, int value) {
    if (*head == NULL) return;

    Node *temp = *head, *prev = NULL;

    // 如果要删除的是头节点
    if (temp->data == value) 
    {
        if (temp->next == *head) 
        {
            free(temp);
            *head = NULL;  // 只剩一个节点
            return;
        } 
        else 
        {
            // 找到最后一个节点
            while (temp->next != *head) 
            {
                temp = temp->next;
            }
            temp->next = (*head)->next;  // 更新最后一个节点的 next 指针
            Node* toDelete = *head;
            *head = (*head)->next;  // 更新头节点
            free(toDelete);
            return;
        }
    }

    // 寻找要删除的节点
    while (temp->next != *head && temp->next->data != value) 
    {
        temp = temp->next;
    }

    if (temp->next != *head) 
    {
        Node* toDelete = temp->next;
        temp->next = toDelete->next;
        free(toDelete);
    } 
    else 
    {
        printf("Value %d not found.\n", value);
    }
}

// 查找节点
Node* findNode(Node* head, int value) 
{
    if (head == NULL) return NULL;

    Node* temp = head;
    do 
    {
        if (temp->data == value) 
        {
            return temp;
        }
        temp = temp->next;
    } 
    while (temp != head);
    return NULL;  // 没找到
}

// 更新节点值
void updateNode(Node* head, int oldValue, int newValue) 
{
    Node* node = findNode(head, oldValue);
    if (node) 
    {
        node->data = newValue;
    } 
    else 
    {
        printf("Value %d not found for update.\n", oldValue);
    }
}

// 打印链表
void printList(Node* head)
{
    if (head == NULL) return;

    Node* temp = head;
    do 
    {
        printf("%d -> ", temp->data);
        temp = temp->next;
    } 
    while (temp != head);
    printf("(back to head)\n");
}

// 释放链表
void freeList(Node* head) {
    if (head == NULL) return;

    Node* current = head;
    Node* nextNode;
    do {
        nextNode = current->next;
        free(current);
        current = nextNode;
    } while (current != head);
}

// 主函数
int main() {
    Node* head = NULL;

    // 插入节点
    insert(&head, 10);
    insert(&head, 20);
    insert(&head, 30);
    insert(&head, 40);
    printList(head);

    // 更新节点
    updateNode(head, 20, 25);
    printList(head);

    // 查找节点
    Node* found = findNode(head, 25);
    if (found) {
        printf("Found node with value: %d\n", found->data);
    }

    // 删除节点
    deleteNode(&head, 10);
    printList(head);

    // 释放链表
    freeList(head);

    return 0;
}

基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值