堆,数组实现,c语言手写

int heap[MAX_N];
int sz = 0;

void push(int x)
{
   
	//父亲节点的编号  
	int i = sz++;
	while(i > 0)
	{
   
		int p = (i - 1)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的 C 语言程序,用于计算离散傅里叶变换(DFT): ```c #include <stdio.h> #include <math.h> #define PI 3.14159265358979323846 typedef struct { double real; double imag; } complex; complex complex_add(complex a, complex b) { complex c; c.real = a.real + b.real; c.imag = a.imag + b.imag; return c; } complex complex_sub(complex a, complex b) { complex c; c.real = a.real - b.real; c.imag = a.imag - b.imag; return c; } complex complex_mul(complex a, complex b) { complex c; c.real = a.real * b.real - a.imag * b.imag; c.imag = a.real * b.imag + a.imag * b.real; return c; } void dft(complex *x, int N) { complex X[N]; for (int k = 0; k < N; k++) { X[k].real = 0.0; X[k].imag = 0.0; for (int n = 0; n < N; n++) { complex Wnk; Wnk.real = cos(2 * PI * n * k / N); Wnk.imag = -sin(2 * PI * n * k / N); X[k] = complex_add(X[k], complex_mul(x[n], Wnk)); } } for (int k = 0; k < N; k++) { x[k] = X[k]; } } int main() { complex x[] = {{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; int N = sizeof(x) / sizeof(complex); dft(x, N); for (int n = 0; n < N; n++) { printf("%f + %fi\n", x[n].real, x[n].imag); } return 0; } ``` 这个程序使用了一个复数结构体 `complex`,定义了三个复数运算 `complex_add`、`complex_sub` 和 `complex_mul`,以及一个离散傅里叶变换函数 `dft`。 在 `dft` 函数中,我们先定义了一个临时的复数数组 `X`,用于存储变换后的结果。然后,我们对每个频率分量 `k`,计算出对应的旋转因子 `Wnk`,并使用 `X[k]` 累加所有时域信号 `x[n]` 乘上旋转因子的结果。最后,我们再把计算出来的结果赋值回原始的信号数组 `x` 中。 在 `main` 函数中,我们定义了一个长度为 4 的测试信号数组 `x`,并调用 `dft` 函数对它进行了变换。最后,我们输出了变换后的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值