#include <stdio.h>
#include <math.h>
#define TOL 1e-6
#define MAX_ITER 1000
double g(double x) {
// 不动点迭代函数, g(x) = x - f(x) / f'(x)
return x - (pow(x, 3) + 2 * pow(x, 2) + 2 * x + 1) / (3 * pow(x, 2) + 4 * x + 2);
}
int main() {
double x0 = 1.0;
double x = x0;
int iter = 0;
double error = 1.0;
while (error > TOL && iter < MAX_ITER) {
double x_new = g(x);
error = fabs(x_new - x);
x = x_new;
iter++;
}
if (iter >= MAX_ITER) {
printf("error”);
} else {
printf("解 x = %f\n", x);
}
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:队列有着对尾入数据队头出数据的特点
栈只能顶进顶出
那么可以用两个队列,数据入栈时将数据输入q1队列,出栈时由q1队列队头出数据导入q2队列,知道遇到栈顶(也就是q1队列最后一个数据)删除即可。
这里q1,q2两个队列需要多次互相导数据,q1,q2的功能也会互相转换。