双向链表是一种常见的数据结构,它与单向链表相似,但与单向链表不同的是,双向链表中每个节点都有两个指针,一个指向前一个节点,一个指向后一个节点。这种结构使得双向链表可以在前后两个方向上遍历链表。

以下是用C语言实现双向链表的示例代码:

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

typedef struct Node {
    int data;
    struct Node *prev;
    struct Node *next;
} Node;

Node *createNode(int data) {
    Node *newNode = (Node *)malloc(sizeof(Node));
    newNode->data = data;
    newNode->prev = NULL;
    newNode->next = NULL;
    return newNode;
}

Node *insertAtBeginning(Node *head, int data) {
    Node *newNode = createNode(data);
    if (head == NULL) {
        head = newNode;
    } else {
        newNode->next = head;
        head->prev = newNode;
        head = newNode;
    }
    return head;
}

Node *insertAtEnd(Node *head, int data) {
    Node *newNode = createNode(data);
    if (head == NULL) {
        head = newNode;
    } else {
        Node *temp = head;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = newNode;
        newNode->prev = temp;
    }
    return head;
}

Node *deleteNode(Node *head, int data) {
    if (head == NULL) {
        return head;
    } else if (head->data == data) {
        head = head->next;
        free(head->prev);
        head->prev = NULL;
    } else {
        Node *temp = head;
        while (temp != NULL && temp->data != data) {
            temp = temp->next;
        }
        if (temp == NULL) {
            printf("Element not found.\n");
        } else {
            temp->prev->next = temp->next;
            if (temp->next != NULL) {
                temp->next->prev = temp->prev;
            }
            free(temp);
        }
    }
    return head;
}

void display(Node *head) {
    if (head == NULL) {
        printf("List is empty.\n");
    } else {
        Node *temp = head;
        printf("List is: ");
        while (temp != NULL) {
            printf("%d ", temp->data);
            temp = temp->next;
        }
        printf("\n");
    }
}

int main() {
    Node *head = NULL;
    int choice, data;

    while (1) {
        printf("1. Insert at beginning.\n");
        printf("2. Insert at end.\n");
        printf("3. Delete.\n");
        printf("4. Display.\n");
        printf("5. Exit.\n");
        printf("Enter your choice: ");
        scanf("%d", &choice);

        switch (choice) {
            case 1:
                printf("Enter the element to be inserted: ");
                scanf("%d", &data);
                head = insertAtBeginning(head, data);
                break;
            case 2:
                printf("Enter the element to be inserted: ");
                scanf("%d", &data);
                head = insertAtEnd(head, data);
                break;
            case 3:
                printf("Enter the element to be deleted: ");
                scanf("%d", &data);
                head = deleteNode(head, data);
                break;
            case 4:
                display(head);
                break;
            case 5:
                exit(0);
            default:
                printf("Invalid choice.\n");
                break;
        }
    }

    return 0;
}

这个示例代码包含了以下操作:

  • 创建一个新的双向链表节点。
  • 在双向链表的开头插入一个节点。
  • 在双向链表的结尾插入一个节点。
  • 删除一个节点。
  • 显示双向链表的所有节点。
  • 退出程序。

你可以根据自己的需求修改这个代码,实现你自己的双向链表。

用c语言实现双向链表

原文地址: https://www.cveoy.top/t/topic/w7W 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录