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日

相关文章

  • 使用SpringBoot的CommandLineRunner遇到的坑及解决

    使用Spring Boot的CommandLineRunner接口可以在应用程序启动时运行一些代码。但是在使用CommandLineRunner时,可能会遇到一些坑,下面是攻略及相应示例: 坑点及解决方案 1. CommandLineRunner执行顺序问题 在项目中可能会有多个CommandLineRunner实现类,SpringBoot在执行Comman…

    C 2023年5月23日
    00
  • C++编译/编辑器对OIer的必要功能(推荐)

    C++编译/编辑器对OIer的必要功能(推荐) C++编译/编辑器是开发者进行编程时必要的工具,对于OIer而言,这些工具是必不可少的辅助设备。以下是编译/编辑器应该具备的必要功能以及一些推荐的C++编译/编辑器。 必要功能 代码高亮 —— 代码高亮可以使得代码更加美观易读,同时也方便调试。有些编辑器支持自定义语法高亮。 代码补全 —— 代码补全可以自动完成…

    C 2023年5月23日
    00
  • win11怎么分盘?Win11电脑C磁盘分盘方法

    下面是“win11怎么分盘?Win11电脑C磁盘分盘方法”的完整攻略。 准备工作 在进行C盘分区之前,请确保您已经对电脑进行了备份,并且您有管理员权限以进行分区更改。此外,您还需要具备一些分区工具,例如Disk Management、DiskGenius、EaseUS Partition Master等。 方法一:使用Disk Management分区工具 …

    C 2023年5月23日
    00
  • 一起来学习C语言的字符串转换函数

    一起来学习C语言的字符串转换函数 为什么要学习字符串转换函数 在C语言中,字符串处理非常常见,那么在字符串的处理过程中,必然需要将一些数字或其他类型的数据转换成字符串以实现一些输出的需求,或者将一个字符串转换成数字或其他类型的数据以实现一些计算的需求。因此,掌握字符串转换函数在C语言中是非常有必要和基础的。 两类字符串转换函数 在C语言中有两类字符串转换函数…

    C 2023年5月30日
    00
  • 基于C语言实现点菜系统

    基于C语言实现点菜系统攻略 介绍 点菜系统是一个常见的应用软件,其主要功能是让用户通过计算机选择自己所需的食品以及数量,以便于快捷地进行下单操作。本文将全面介绍如何使用C语言来实现一个简单的点菜系统。 思路 一个点菜系统主要需要实现以下功能: 展示菜单 选择菜品 输入数量 确认订单 结算订单 基于以上的思路,我们可以进行如下的代码实现。 示例 示例1:展示菜…

    C 2023年5月23日
    00
  • vs2005编译时出现C2859错误该怎么办?

    题目中提到的C2859错误是VS2005编译器出现的一种错误,主要是因为编译器没有足够的内存来处理源代码的语法。 解决方法如下: 方法一: 打开项目工程,找到Solution Explorer中的“.vcxproj”文件。 在文件夹中找到“ClCompile”节点,将“AdditionalOptions”项目的信息更改为“/Zm300”。 重新编译项目。 这…

    C 2023年5月23日
    00
  • jQuery自带的一些常用方法总结

    jQuery是什么?jQuery是一款流行的JavaScript库,具有优秀的跨浏览器兼容性和出色的HTML文档操作、事件处理、动画效果、AJAX以及插件扩展等功能。 jQuery自带的一些常用方法总结: HTML文档操作 .html(): 获取或设置匹配元素集合中的HTML内容。 用法示例: “` // 获取元素的HTML内容 var htmlConte…

    C 2023年5月23日
    00
  • 如何快速辨别USB Type-C数据线的好与坏?

    当购买USB Type-C数据线时,要注意以下几点: 步骤一:看外观 数据线的外观可以直接反映其质量。一般而言,好的USB Type-C数据线的线材会采用高质量的材料,比如高纯度铜线或高密度尼龙编织线,手感较为舒适,并且线料表面会进行人性化的设计,如添加防滑纹路。此外,好的USB Type-C数据线会采用高质量的接头,面料通常会采用金属材质,防止耐用性下降。…

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