<Fundamentals of Data Structures in C> 1.2 算法描述

【习题2】


霍纳规则 Horner's method:

用来简化朴素多项式的求值,在中国叫秦九韶算法。
霍纳规则是一种将一元n次多项式求值问题转化为n个一次式算法。其大大简化了计算过程,即使在现代,利用计算机解决多项式的求值问题时,霍纳规则依然是最优的算法规则。
霍纳规则是采用最少的乘法运算策略,求多项式A(x) = a nx n+ a n-1x n-1+...+ a 1x + a 0在x0处的值,该规则是A(x 0)=(...((a nx 0+ a n-1)x 0+...+ a 1)x 0+ a 0)

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
 
#define MAX_SIZE 101
 
float horner(float [], int, int, float);
 
int main()
{
    float coefficient[MAX_SIZE];
 
    /*输入多项式的项数*/
    printf("Enter the number of polynomial terms to generate: ");
    int n;
    scanf_s("%d", &n);    /* VS2013等版本中使用scanf_s(),VC6.0中使用scanf(),下同*/
    if(n < 1 || n > MAX_SIZE)
    {
        fprintf(stderr, "Improper value of n\n");
        exit(EXIT_FAILURE);
    }
 
 
    srand((unsigned)time(NULL));
    int i;
    for(i = 0; i < n; i++)
    {
        /*随机生成n个系数并存在数组coefficient里*/
        coefficient[i] = rand() / (float)(RAND_MAX / 100);
        printf("%lf\t", coefficient[i]);
    }
 
 
    /*输入多项式的自变量值*/
    printf("\nEnter the value of x: ");
    float x;
    scanf_s("%f", &x);
 
 
    /*多项式结果*/
    double result = 0;
    result = horner(coefficient, n, 0, x);
    printf("\nResult of this polynomial in %f is %f\n", x, result);
    return 0;
}
 
 
float horner(float list[], int n, int i, float x)
{
    if(i == n - 1)
        return list[n-1]; /*递归出口*/
    else
        return horner(list, n, i + 1, x) * x + list[i]; /*递归过程*/
}

【习题3】
取巧:假设有n个布尔变量,那就直接把大于零且不大于2^n的整数,按二进制输出,就是所有可能,1代表真,0代表假。

但目的是要练习递归函数。下面这个例子是找个地方先存起来,递归完毕了统一打印。

#include <stdio.h>
#define Max_size 100 /*最多可以使得n=100 */

void value(char *, int i, int n);

void main(void)
{
int n, k;
char list[Max_size]; /*用字符数组存储字符,‘T’代表true, ‘F’代表false*/
printf("input the number of Booleans: \n");
scanf("%d", &n);
if (n<1 || n>Max_size)
{
   printf("\nImproper number n!\n");
   exit(1);
}
for(k=0; k<n; k++)
{
   list[k] = 'T';
}
value(list, 0, n-1);
}

void value (char *list, int i, int n)
{
int j;
if (i==n+1) /*已经递归完毕, 输出序列*/
{
   for (j=0; j<=n; j++)
   {
    printf("%c", list[j]);
   }
   printf("     ");
}
else {
   list[i] = 'T';
   value(list, i+1, n);
   list[i] = 'F';
   value(list, i+1, n);
}
}

【习题4】
有递归什么事情么?

#include "stdio.h"
int main()
{
    int x,y,z,max,min;
    scanf("%d%d%d",&x,&y,&z);
    if(x>y){
        max=x;
        min=y;
    }
    if(z>max) max=z;
    if(min>z) min=z;
    y=x+y+z-max-min;
    x=max;
    z=min;
    printf("从大到小排序:%d %d %d\n",x,y,z);       
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 数据结构是计算机科学中非常重要的一个概念,是指用来组织和存储数据的方式。在C语言中,数据结构的基础是非常重要的,它与程序的性能和效率息息相关。 首先,C语言本身提供了一些基本的数据结构,例如数组和结构体。数组是一种线性的数据结构,可以用来存储一系列相同类型的元素。结构体允许我们将不同类型的数据组合在一起,形成一个新的数据类型。 除了C语言本身提供的基本数据结构外,我们还可以通过自己编写代码来实现更复杂的数据结构,例如链表、栈和队列。链表是一种动态的数据结构,可以根据需要分配和释放内存。栈是一种后进先出(LIFO)的数据结构,常用于函数调用和表达式求值。队列是一种先进先出(FIFO)的数据结构,常用于任务调度和缓冲区管理。 在学习和应用数据结构时,我们需要掌握它们的基本操作,例如插入、删除和查找。这些操作的实现涉及到指针的使用,因为在C语言中,我们需要通过指针来访问和操作数据结构中的元素。 此外,数据结构的选择和设计也需要考虑到程序的需求和特点。例如,对于需要频繁插入和删除操作的场景,链表可能是一个更好的选择,而对于需要快速随机访问的场景,数组可能更适合。 总之,掌握C语言中的数据结构基础是非常重要的,它可以帮助我们构建高效、可靠的程序。在学习和应用数据结构时,我们需要理解它们的原理和特点,掌握基本的操作和编程技巧,并根据实际情况选择合适的数据结构。 ### 回答2: 《C语言数据结构基础》主要介绍了在C语言中常用的数据结构及其基本原理。数据结构是计算机科学中非常重要的部分,它涉及到存储和组织数据的方法和技巧。 在这本书中,首先介绍了数据结构的基本概念,包括数组、链表、堆栈和队列等。数组是一种线性数据结构,它可以存储一系列具有相同数据类型的元素。链表是一种动态数据结构,它由节点组成,每个节点包含数据和指向下一个节点的指针。堆栈是一种后进先出(LIFO)的数据结构,它只允许在栈顶进行插入和删除操作。队列是一种先进先出(FIFO)的数据结构,它允许在队列的一端插入元素,在另一端删除元素。 接着,书中介绍了树和图这两种非线性数据结构。树是一种层级的数据结构,它由根节点和零个或多个子节点组成。常见的树结构包括二叉树、二叉搜索树和红黑树等。图是一种由节点和边组成的数据结构,它用于表示不同对象之间的关系。图可以是有向的或无向的,可以是带权重的或不带权重的。 此外,书中还介绍了查找和排序算法,如线性查找、二分查找、冒泡排序、插入排序和快速排序等。这些算法是为了在数据结构中有效地查找和排序数据。 最后,书中还提供了一些例子和练习,方便读者进一步加深理解和巩固知识。 总之,《C语言数据结构基础》通过详细的介绍和示例,帮助读者掌握常用的数据结构和相关算法在C语言中的实现和应用。它是学习数据结构和算法的重要参考书,并且对于计算机科学和软件开发领域的学习和实践都具有重要的作用。 ### 回答3: 数据结构是计算机科学中的重要基础知识,其目的是为了有效地组织和存储数据,以便快速地访问和操作数据。C是一种广泛使用的编程语言,对于学习数据结构来说是非常合适的。 在学习C语言的数据结构基础知识时,我们首先需要了解一些基本的数据结构,例如数组、链表、栈、队列和树等。这些数据结构代表了不同的数据组织方式和访问方式。 我们需要掌握数据结构的定义和特性,以及它们所支持的基本操作。例如,我们需要了解数组是一种线性数据结构,可以通过索引快速访问元素;链表是一种用指针链接数据节点的数据结构,可以高效地插入和删除元素;栈和队列是常用的数据结构,分别支持后进先出和先进先出的操作;树是一种层次化的数据结构,可以用于模拟层次关系。 我们还需要学习如何在C语言中实现这些数据结构。例如,我们可以使用C语言中的数组和指针来实现数组和链表;使用数组实现栈和队列;使用指针和递归实现树等等。在实现数据结构时,需要注意内存管理和算法性能等方面的问题。 此外,我们还需要学习如何分析和评估数据结构的性能。这包括了时间复杂度和空间复杂度的分析,以及选择优化算法和数据结构的原则。 总之,学习C语言中的数据结构基础知识是非常重要的。它不仅可以帮助我们更好地理解和使用C语言,还可以为我们后续学习更加高级的数据结构和算法打下坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值