如果不使用malloc和指针改怎么编写
时间: 2024-03-26 16:41:02 浏览: 73
如果不使用`malloc`和指针,可以使用C语言中的静态数组来实现。以下是使用静态数组的等效代码:
```c
#include <stdio.h>
#include <complex.h>
#include <math.h>
#define N 10
int main() {
double complex jw_list[N];
double pi = acos(-1.0);
for (int i = 0; i < N; i++) {
double item = -N/2 + i;
jw_list[i] = I * 2 * pi / N * item;
printf("%f + %fi\n", creal(jw_list[i]), cimag(jw_list[i]));
}
return 0;
}
```
解释:程序将静态数组`jw_list`定义为`double complex`类型,大小为`N`。在循环中遍历数组并计算每个元素的值,并将其存储到数组中。由于静态数组的内存空间在编译时就已经分配好了,因此不需要使用`malloc`和指针。
相关问题
假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素节点(注意不设头指针),编写相应的队列初始化、入队列和出队列的算法。
队列初始化:
```
void initQueue(LinkList &rear) {
rear = (LinkList)malloc(sizeof(ListNode)); // 创建头结点
rear->next = rear; // 队列为空,指向自己
}
```
入队列:
```
void enQueue(LinkList &rear, ElemType x) {
LinkList p = (LinkList)malloc(sizeof(ListNode)); // 创建新节点
p->data = x;
p->next = rear->next; // 新节点插入队尾
rear->next = p;
rear = p; // 修改队尾指针
}
```
出队列:
```
bool deQueue(LinkList &rear, ElemType &x) {
if (rear == rear->next) return false; // 队列为空
LinkList p = rear->next->next; // 找到队头节点
x = p->data;
if (p == rear) rear = rear->next; // 队列中只有一个元素
rear->next->next = p->next; // 删除队头节点
free(p);
return true;
}
```
其中,`LinkList` 为指向链表节点的指针类型,`ListNode` 为链表节点的结构体类型,`ElemType` 为队列元素的数据类型。
阅读全文