C语言实现的双向链表所有基本算法

C语言实现的双向链表所有基本操作,包括创建、插入、删除、查找、遍历、反转等算法。代码包含详细的注释,方便理解和验证

代码说明
Node 结构:定义了双向链表的节点结构,包括数据部分和前后指针。
基本操作函数:
createNode:创建新节点。
appendNode:在链表末尾追加节点。
insertAtPosition:在指定位置插入节点。
deleteNode:删除具有指定值的节点。
reverseList:反转链表。
searchNode:查找节点。
printList:打印整个链表。
freeList:释放链表占用的内存。
用户交互:主函数通过循环菜单,支持用户进行各种操作。
测试方法
编译并运行代码后,可以按照提示输入相应的操作进行验证,例如追加节点、插入节点到指定位置、删除节点、查找节点、打印链表等操作。

// 释放链表内存
void freeList(Node** head) {
    Node* temp;
    while (*head != NULL) {
        temp = *head;
        *head = (*head)->next;
        free(temp);
    }
}

// 主函数,供用户进行验证
int main() {
    Node* head = NULL;
    int choice, value, position;

    while (1) {
        printf("\n双向链表操作菜单:\n");
        printf("1. 追加节点\n");
        printf("2. 插入节点到指定位置\n");
        printf("3. 删除节点\n");
        printf("4. 反转链表\n");
        printf("5. 查找节点\n");
        printf("6. 打印链表\n");
        printf("7. 退出\n");
        printf("请输入您的选择:");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                printf("请输入要追加的值:");
                scanf("%d", &value);
                appendNode(&head, value);
                printf("当前链表:");
                printList(head);  // 立即展示链表
                break;
            case 2:
                printf("请输入要插入的值:");
                scanf("%d", &value);
                int length = getListLength(head);  // 获取链表当前长度
                printf("请输入要插入的位置(从 0 开始,0 表示插入到链表头部):\n");
                printf("链表当前长度为 %d,允许插入范围为 0 到 %d。\n", length, length);
                scanf("%d", &position);
                insertAtPosition(&head, value, position);
                printf("当前链表:");
                printList(head);  // 立即展示链表
                break;
            case 3:
                printf("请输入要删除的值:");
                scanf("%d", &value);
                deleteNode(&head, value);
                printf("当前链表:");
                printList(head);  // 立即展示链表
                break;
            case 4:
                reverseList(&head);
                printf("链表已反转。\n");
                printf("当前链表:");
                printList(head);  // 立即展示链表
                break;
            case 5:
                printf("请输入要查找的值:");
                scanf("%d", &value);
                Node* foundNode = searchNode(head, value);
                if (foundNode != NULL) {
                    printf("节点 %d 已找到。\n", foundNode->data);
                } else {
                    printf("节点未找到。\n");
                }
                printf("当前链表:");
                printList(head);  // 立即展示链表
                break;
            case 6:
                printf("当前链表:");
                printList(head);  // 立即展示链表
                break;
            case 7:
                freeList(&head);
                printf("程序结束。\n");
                return 0;
            default:
                printf("无效的选择,请重试。\n");
                break;
        }
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值