sususususu 发表于 2023-9-16 21:36:30

[Error] expected ')' before 'struct' 链表求助

#include <stdio.h>
#include <stdlib.h>

//定义链表结构
struct Node {
        int data;
        struct Node* next;
};

//查找链表中第i个元素的函数
void findElement(struct Node* head, int i){
        struct Node* current = head->next;
        int index = 1;
       
        while (current != NULL && index < i){
                current = current->next;
                index++;
        }
       
        if (current == NULL || index != i) {
                printf("不存在该元素\n");
   }else {
           printf("第 %d 个元素的值为 %d\n", i, current->data);
       }
}

int main() {
       
        struct Node* head = (struct Node*)malloc(sizeof(struct));                      //为什么这里报错 expected ')' before 'struct'
        head->next = NULL;
       
        //在链表中插入一些元素,这里假设有5个元素
        for (int i = 1; i <= 5; i++){
                struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
                newNode->data = i*10; //假设元素值是10的倍数
                newNode->next = head->next;
                head->next = newNode;
        }
       
        //要查找的位置
        int i;
        printf("请输入要查找的位置(1 ≤ i ≤ 5):");
        scanf("%d", &i);
       
        //调用查找函数
        findElement(head, i);
       
        //释放链表节点的内存
        struct Node* current = head->next;
        while (current != NULL){
                struct Node* temp = current;
                current = current->next;
                free(temp);
        }
        free(head);
       
        return 0;
       
}

问题见于int main()下面第一个注释,求大佬解惑

isdkz 发表于 2023-9-16 21:36:33

在main函数中,为了创建一个新的链表头节点,需要使用malloc函数来分配内存空间。但是在代码中,malloc函数的参数是struct,而不是struct Node。因此,在struct之前应该加上Node,即应该为sizeof(struct Node)。修改代码如下:

struct Node* head = (struct Node*)malloc(sizeof(struct Node));

陶远航 发表于 2023-9-16 21:36:40

在 struct Node* head = (struct Node*)malloc(sizeof(struct)); 这一行中,你忘记了指定要分配内存的结构体类型,应该写成 struct Node* head = (struct Node*)malloc(sizeof(struct Node));。

也就是说,你需要将 sizeof(struct) 改为 sizeof(struct Node)。这样就能够成功分配足够的内存来存储一个 struct Node 类型的节点,并将其赋值给 head 指针。

修改后的代码如下:

#include <stdio.h>
#include <stdlib.h>

// 定义链表结构
struct Node {
    int data;
    struct Node* next;
};

// 查找链表中第 i 个元素的函数
void findElement(struct Node* head, int i) {
    struct Node* current = head->next;
    int index = 1;

    while (current != NULL && index < i) {
      current = current->next;
      index++;
    }

    if (current == NULL || index != i) {
      printf("不存在该元素\n");
    } else {
      printf("第 %d 个元素的值为 %d\n", i, current->data);
    }
}

int main() {
    struct Node* head = (struct Node*)malloc(sizeof(struct Node));
    head->next = NULL;

    // 在链表中插入一些元素,这里假设有5个元素
    for (int i = 1; i <= 5; i++) {
      struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
      newNode->data = i*10; // 假设元素值是10的倍数
      newNode->next = head->next;
      head->next = newNode;
    }

    // 要查找的位置
    int i;
    printf("请输入要查找的位置(1 ≤ i ≤ 5):");
    scanf("%d", &i);

    // 调用查找函数
    findElement(head, i);

    // 释放链表节点的内存
    struct Node* current = head->next;
    while (current != NULL) {
      struct Node* temp = current;
      current = current->next;
      free(temp);
    }
    free(head);

    return 0;
}


希望能够解决你的问题!
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: [Error] expected ')' before 'struct' 链表求助