C语言的10大基础算法

C语言的10大基础算法

简介

C语言是一门非常古老并且非常流行的编程语言。C语言强大的功能和丰富的软件库致使它成为了许多程序员和企业的首选开发语言。不仅如此,C语言中还有一些非常重要而基础的算法,这些算法也是程序员必须掌握的一部分。这篇文章将介绍C语言中的10个最基础的算法。

算法介绍

1. 排序算法

排序算法是所有程序员必须掌握的一部分,因为数据处理与排序是编程中不可避免的事情。C语言提供了不少的排序算法,如冒泡排序、选择排序、插入排序等。

以下是一个冒泡排序的C语言代码示例:

void bubble_sort(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]) 
                swap(&arr[j], &arr[j+1]); 
}

2. 查找算法

查找算法是在一组数据中查找特定值的一种方式。线性查找和二分查找是C语言中最常见的查找算法。

以下是一个二分查找的C语言代码示例:

int binarySearch(int arr[], int l, int r, int x) 
{ 
    if (r >= l) { 
        int mid = l + (r - l) / 2; 

        if (arr[mid] == x) 
            return mid; 

        if (arr[mid] > x) 
            return binarySearch(arr, l, mid - 1, x); 

        return binarySearch(arr, mid + 1, r, x); 
    } 

    return -1; 
} 

3. 字符串处理算法

字符串处理算法是在C语言中非常常见的算法,如字符串的拼接、分割、转换等操作。

以下是一个字符串拼接的C语言代码示例:

char *concat(char *s1, char *s2) 
{ 
    char *result = (char *)malloc(strlen(s1) + strlen(s2) + 1); 
    strcpy(result, s1); 
    strcat(result, s2); 
    return result; 
} 

4. 单链表

单链表是C语言中非常常用的数据结构之一,操作简便且易于拓展。

以下是一个单链表的C语言代码示例:

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

void printList(Node *node) 
{ 
    while (node != NULL) 
    { 
        printf("%d ", node->data); 
        node = node->next; 
    } 
} 

5. 栈与队列

栈与队列是C语言中最受欢迎的数据结构之一。栈与队列的使用场景非常丰富,如表达式转换、进程管理等。

以下是一个栈的C语言代码示例:

#define MAX_SIZE 1000 

typedef struct Stack 
{ 
    int top; 
    int arr[MAX_SIZE]; 
}stack; 

int isEmpty(stack *s) 
{ 
    return s->top == -1; 
} 

void push(stack *s, int data) 
{ 
    s->arr[++s->top] = data; 
} 

int pop(stack *s) 
{ 
    if (!isEmpty(s)) 
        return s->arr[s->top--]; 

    return -1; 
} 

6. 递归算法

递归算法常用于处理复杂的问题,例如排序、求和等操作。

以下是一个阶乘的C语言代码示例:

int factorial(int n) 
{ 
    if (n == 0) 
        return 1; 

    return n * factorial(n-1); 
} 

7. 查找与排序树

二叉树是C语言中一种非常常见的数据结构,不仅可以用于查找操作,还可以用于排序。

以下是一个二叉树的C语言代码示例:

typedef struct node 
{ 
    int key; 
    struct node *left, *right; 
}Node; 

Node *newNode(int item) 
{ 
    Node *temp =  (Node *)malloc(sizeof(Node)); 
    temp->key = item; 
    temp->left = temp->right = NULL; 
    return temp; 
} 

Node* insert(Node* node, int key) 
{ 
    if (node == NULL) 
        return newNode(key); 

    if (key < node->key) 
        node->left  = insert(node->left, key); 
    else if (key > node->key) 
        node->right = insert(node->right, key);    

    return node; 
} 

8. 图

图是C语言中用于解决复杂的问题的一种非常重要的数据结构。

以下是一个图的C语言代码示例:

struct Graph 
{ 
    int V; 
    struct AdjList* array; 
}; 

struct AdjList 
{ 
    struct GraphNode* head; 
}; 

struct GraphNode 
{ 
    int dest; 
    struct GraphNode* next; 
}; 

struct Graph* createGraph(int V) 
{ 
    struct Graph* graph = (struct Graph*) malloc(sizeof(struct Graph)); 
    graph->V = V; 

    graph->array = (struct AdjList*) malloc(V * sizeof(struct AdjList)); 

    int i; 
    for (i = 0; i < V; ++i) 
        graph->array[i].head = NULL; 

    return graph; 
} 

9. 动态规划

动态规划算法用于解决复杂的问题,例如组合问题、背包问题等。

以下是一个背包问题的C语言代码示例:

int knapSack(int W, int wt[], int val[], int n) 
{ 
    int i, w; 
    int K[n+1][W+1]; 

    for (i = 0; i <= n; i++) 
    { 
        for (w = 0; w <= W; w++) 
        { 
            if (i==0 || w==0) 
                K[i][w] = 0; 
            else if (wt[i-1] <= w) 
                  K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]],  K[i-1][w]); 
            else
                  K[i][w] = K[i-1][w]; 
        } 
    } 

    return K[n][W]; 
} 

10. 数论算法

数论算法用于解决与数字相关的问题,例如素数、最大公约数等。

以下是一个素数判断的C语言代码示例:

bool isPrime(int n) 
{ 
    if (n <= 1) 
        return false; 

    for (int i = 2; i < n; i++) 
        if (n%i == 0) 
            return false; 

    return true; 
} 

结论

C语言是程序员必须掌握的一种编程语言,而在C语言中,掌握基本算法是必不可少的。本文介绍了C语言中最基础的10个算法,并提供了每种算法的示例,希望可以帮助读者更好地理解这些算法并应用到实际开发中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言的10大基础算法 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • C语言嵌套链表实现学生成绩管理系统

    下面我将详细讲解“C语言嵌套链表实现学生成绩管理系统”的完整攻略。 什么是嵌套链表? 嵌套链表就是在链表的节点中包含另一个链表节点的指针,这样就可以形成多级结构。在C语言中,可以使用结构体和指针实现嵌套链表。 实现学生成绩管理系统的步骤 下面是实现学生成绩管理系统的步骤: 定义链表节点结构体 struct node { int stu_id; //学生编号 …

    C 2023年5月23日
    00
  • 浅析VSCode launch.json中的各种替换变量的意思 ${workspaceFolder} ${file} ${fileBasename} ${fileDirname}等

    对于”浅析VSCode launch.json中的各种替换变量的意思”这个话题,以下是我准备好的完整攻略。 1. 简介 在 VSCode 调试过程中,通常需要配置一个 .vscode/launch.json 文件。这个配置文件中包括了很多参数,其中一些参数需要填写变量,这些变量通常用于在不同情况下动态生成参数值。这些变量被称为“替换变量”,是一种非常方便的技…

    C 2023年5月23日
    00
  • C++利用jsoncpp库实现写入和读取json文件

    下面是C++利用jsoncpp库实现写入和读取json文件的完整攻略。 安装jsoncpp库 首先需要安装jsoncpp库,可以通过以下方式进行安装: 使用apt-get命令在Ubuntu系统下安装: sudo apt-get install libjsoncpp-dev 使用yum命令在CentOS系统下安装: sudo yum install jsonc…

    C 2023年5月23日
    00
  • C++ 如何判断四个点是否构成正方形

    判断四个点是否构成正方形是一个常见的问题,可以使用数学方法进行判断,也可以利用C++语言编写代码对四个点进行判断。 一、使用数学方法进行判断 如果四个点能构成正方形,那么它们应该满足以下条件: 四个点的四条边相等。 对角线相等。 两条对边之间的角度均为90度。 如果以上条件都满足,则四个点能构成正方形。 二、利用C++语言编写代码进行判断 以下是C++代码示…

    C 2023年5月23日
    00
  • 2019年滴滴出行前端工程师面试题(附答案)

    下面是详细讲解“2019年滴滴出行前端工程师面试题(附答案)”的完整攻略。 理解面试题意思 首先,要认真阅读所有面试题目,并理解每个问题的意思。针对每个问题,需要理解问题的背景、要求和解决方案。在阅读问题时,可以结合实际场景或者经验,尝试通过自己的思考,预测和解答面试官可能会继续提问的问题。 例如,题目中的第一个问题:“如何实现一个模块加载器?”,我们可以针…

    C 2023年5月23日
    00
  • C++中的自增与自减

    C++中的自增(++)和自减(–)是一对重要的运算符,可以用于对变量的值进行加或减1操作。在本文中,我们将详细讲解这两个运算符的使用方法和注意事项。 自增运算符 ++ 前置自增运算符 前置自增运算符(++i)会先将变量i的值加1,然后再将增加后的值返回。下面是一个示例: int i = 5; int j = ++i; // i 现在的值为 6,j 的值也为…

    C 2023年5月23日
    00
  • C++ win系统如何用MinGW编译Boost库

    C++ Win系统如何用MinGW编译Boost库 Boost库是一个开源的、高质量的库,包括许多各种各样的工具和库,被广泛应用于C++编程中。MinGW是一个基于GNU编译器的Windows程序开发工具包,提供了一个完整的开发环境,可用于开发Windows应用程序。本攻略介绍如何使用MinGW编译Boost库。 准备工作 1.下载和安装MinGW可以从Mi…

    C 2023年5月23日
    00
  • C语言算法练习之数组求素数

    C语言算法练习之数组求素数 概述 本篇文章将介绍如何使用C语言实现数组求素数的算法。素数,又称质数,是指除了1和它本身以外,不能被其他自然数整除的正整数。本篇文章的算法流程如下:输入一个正整数n,计算出小于等于n的所有素数,将它们存储在一个数组中,并输出这些素数。该算法将使用C语言实现。 算法实现 1. 定义函数 首先,我们需要定义一个函数来计算小于等于n的…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部