C数据结构与算法

引言

C语言是一种非常重要的编程语言,广泛用于系统开发和嵌入式领域。数据结构和算法是计算机科学的基础,在C语言中也有很多常用的数据结构和算法。本文将介绍一些常见的C数据结构和算法,并提供相应的代码示例。

数组

数组是C语言中最基本的数据结构之一。它可以存储一系列相同类型的元素,并根据索引访问这些元素。下面是一个示例数组的定义和访问方法:

int numbers[5] = {1, 2, 3, 4, 5};
int value = numbers[2]; // 访问索引为2的元素

链表

链表是一种常见的动态数据结构,它由一系列节点组成,每个节点包含数据和一个指向下一个节点的指针。下面是一个简单的链表的定义和插入操作的示例:

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

void insert(struct Node** head, int data) {
    struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
    newNode->data = data;
    newNode->next = *head;
    *head = newNode;
}

栈是一种后进先出(LIFO)的数据结构,只允许在栈的顶部进行插入和删除操作。下面是一个栈的定义和入栈、出栈操作的示例:

#define MAX_SIZE 100

struct Stack {
    int data[MAX_SIZE];
    int top;
};

void push(struct Stack* stack, int item) {
    if(stack->top >= MAX_SIZE - 1) {
        printf("栈已满\n");
        return;
    }
    stack->top++;
    stack->data[stack->top] = item;
}

int pop(struct Stack* stack) {
    if(stack->top < 0) {
        printf("栈已空\n");
        return -1;
    }
    int item = stack->data[stack->top];
    stack->top--;
    return item;
}

队列

队列是一种先进先出(FIFO)的数据结构,允许在队列的一端进行插入操作,在另一端进行删除操作。下面是一个队列的定义和入队、出队操作的示例:

#define MAX_SIZE 100

struct Queue {
    int data[MAX_SIZE];
    int front;
    int rear;
};

void enqueue(struct Queue* queue, int item) {
    if(queue->rear >= MAX_SIZE - 1) {
        printf("队列已满\n");
        return;
    }
    queue->rear++;
    queue->data[queue->rear] = item;
}

int dequeue(struct Queue* queue) {
    if(queue->front > queue->rear) {
        printf("队列已空\n");
        return -1;
    }
    int item = queue->data[queue->front];
    queue->front++;
    return item;
}

二叉树

二叉树是一种常见的树形数据结构,每个节点最多有两个子节点。下面是一个二叉树的定义和遍历操作的示例:

struct TreeNode {
    int data;
    struct TreeNode* left;
    struct TreeNode* right;
};

void inorderTraversal(struct TreeNode* root) {
    if(root != NULL) {
        inorderTraversal(root->left);
        printf("%d ", root->data);
        inorderTraversal(root->right);
    }
}

算法

除了数据结构,算法在C语言中也起着重要的作用。下面是一个冒泡排序算法的示例:

void bubbleSort(int arr[], int n) {
    for(int i = 0; i < n - 1; i++) {
        for(int j = 0; j < n - i - 1; j++) {
            if(arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
    }
}

总结

C语言提供了丰富的数据结构和算法,可以满足各种编程需求。本文介绍了一些常见的C数据结构和算法,并提供了相应的代码示例。