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语言中,定义变量的格式如下: 数据类型 变量名 = 初始值; 其中,数据类型表示变量能够存储的数据类型,变量名是变量的名称,初始值是变量的初始值。 数据类型 C语言中的数据类型包括基本数据类型和复合数据类型。其中,基本数据类型包括整数类型、浮点数类型和字符类型,复合数据类型包括数组和结构体等。常见的数据类型…

    C 2023年4月27日
    00
  • 如何在C++中调用python代码你知道吗

    当我们需要在 C++ 项目中调用 Python 代码时,可以通过内置的 Python 解释器来实现。以下是在 C++ 中使用 Python 的完整攻略: 步骤一:安装Python解释器 首先需要安装 Python 解释器。我们可以从官网下载并安装最新版本的 Python,也可以使用 Anaconda 等发行版。安装完成之后,需要将 Python 的路径添加到…

    C 2023年5月23日
    00
  • C 程序 连接两个字符串

    当需要将两个字符串连接在一起时,可以使用 C 程序中提供的 strcat() 函数。下面是连接两个字符串的完整使用攻略。 步骤 1:引入头文件 在 C 语言程序中,我们需要先引入 string.h 头文件来使用字符串函数。 #include <string.h> 步骤 2:初始化字符串 我们需要先初始化要连接的两个字符串。 char str1[2…

    C 2023年5月9日
    00
  • 逍遥自在学C语言 | 第一个C语言程序 九层之台起于垒土

    一、人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。 二、C语言简介 C语言是一种高级语言,运行效率仅次于汇编,支持跨平台 C语言是学习其他高级语言的基础,如C++、Java和Python 三、编程环境 1、在线编译 百度搜索C语言在线编译,会发现有很多在线编译工具 这里以菜鸟工…

    C语言 2023年4月18日
    00
  • 解决偶现的MissingServletRequestParameterException异常问题

    当我们在使用SpringMVC进行开发时,有时会碰到MissingServletRequestParameterException异常,这是因为我们在控制层方法的参数列表中注入了一个参数,但在请求的参数中却找不到该参数导致的。下面是解决该问题的完整攻略: 1. 确认请求参数名称与方法参数名称是否一致 当我们在控制层方法的参数列表中声明了一个参数,例如以下代码…

    C 2023年5月23日
    00
  • C++多线程编程详解

    我会详细讲解C++多线程编程的攻略。对于多线程编程,一般分为以下几个步骤: 1. 包含头文件 要进行多线程编程,需要包含头文件<thread>。 #include <thread> 2. 创建线程 使用std::thread类创建一个线程,并将需要执行的函数作为参数传入。 void my_func() { // 线程要执行的代码 } …

    C 2023年5月22日
    00
  • Win10错误代码0xc0000221怎么修复?Win10错误代码0xc0000221修复方法

    如果在启动Windows 10时出现错误代码0xc0000221,可能会使计算机无法正常启动操作系统。这通常是由于硬件或系统文件的损坏引起的。本文将详细介绍Win10错误代码0xc0000221的修复方法。 什么是Win10错误代码0xc0000221? Win10错误代码0xc0000221是一个启动错误代码,它意味着Windows 10无法加载关键的系统…

    C 2023年5月23日
    00
  • 微信公众平台开发 数据库操作

    微信公众平台开发需要与后端进行数据传输和存储,因此数据存储与数据库操作是非常重要的一部分。本文将详细介绍微信公众平台开发中的数据库操作过程,包括数据库选择、连接、增删改查、数据类型等。 选择数据库 在微信公众平台开发中,我们可以选择适合自己的数据库,比如MySQL、MongoDB、Redis、SQLite、PostgreSQL等。开发者需要根据业务需求和技术…

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