-2

我在 C 中有一个单链表程序。当我在 TC++ 上编译它时,它只有 2 个关于某些声明的错误(很好)。但是当我使用 GCC 在 Ubuntu 中编译它时,它有太多的错误。我为结构的成员创建了一个名为 NODE 的自定义数据类型,但 GCC 不会接受它。因为我使用了 typedef,所以有一个错误说 -

expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘struct’

我错过了什么规则?请帮我!


这是代码:

#include<stdio.h>
typdef struct node
{
    int data;
    NODE *next;
}NODE;

//Creation Of the Nodes with NULL pointers
NODE* createnewnode()
{
    NODE* nn;
    nn=(NODE*)malloc(sizeof(NODE));
    if(nn==NULL)
    {
        printf("Insufficient Memory");
        exit(0);
    }
    printf("Enter data");
    scanf("%d",&nn->data);
    nn->next=NULL;
    return(nn);
}


// Creation Of the Links
NODE* createlinkedlist(NODE *hn, int n)
{
    NODE *cn, *nn;
    for(i=0;i<n;i++);
    {
        nn=createnewnode();
        if(hn==NULL)
        {
            hn=nn;
        }
else
        {
            cn->next==nn;
        }
    cn=nn;
    return(hn);
}

//Display of The Data
void display(NODE *hn)
{

    NODE *cn;
    for(cn=hn;cn!=NULL;cn=cn->next)
    {
        printf("\t %d, "cn->data);
    }
}

//Linear Searching
void search(NODE *hn, int n)
{
    NODE *cn;
    int i, x;
    printf("Enter the data to be found");
    scanf("%d",&x);
    i=0;
    while(i<n)
    {
        if(x==cn->data)
        {
            printf("Data found at %d",i+1);
            break;
        }

        cn=cn->next;
        i=i++;
    }
}

void main()
{
    int n;
    NODE* hn=NULL;
    printf("Enter the number of nodes to be created");
    scanf("%d",&n);
    createlinkedlist(hn,n);
    display(hn);
}

4

2 回答 2

1

即使已更正typedef,您也不能NODE在其自己的声明中使用。先做一个前向声明NODE,或者更好地称之为node

typedef struct node node;
struct node {
  ...
  node* next;
};

编辑:和其他挑剔:

  • 不要投射malloc. 如果您觉得需要它,那么您在其他地方就错了。(这里你不包括stdlib.h
  • 因为 long C 不再有变量的默认类型。你i的 increatelinkedlist是未知的,没有现代编译器会让它通过
  • 您至少有一个地方使用==运算符而不是赋值=。始终在启用所有警告的情况下进行编译,任何体面的编译器都应该发现这一点。
于 2012-08-15T09:10:07.160 回答
0

// 上面问的代码更正,但是程序员的一些逻辑是不正确的。

#include <cstdlib>
#include <iostream>
#include<stdio.h>

using namespace std;

typedef struct node // typedef spell
{
    int data;
   node *next;  // NODE was in upper case it should be in lower case
   node() //Constructor : i defined it in traditional way as extra
    {
        next = NULL;
        data = 0;
    }

}NODE;


//Creation Of the Nodes with NULL pointers
NODE* createnewnode()
{
    NODE* nn;
    nn=(NODE*)malloc(sizeof(NODE));
    if(nn==NULL)
    {
        printf("Insufficient Memory");
        exit(0);
    }
    printf("Enter data");
    scanf("%d",&nn->data);
    nn->next=NULL;
    return(nn);
}


// Creation Of the Links
NODE* createlinkedlist(NODE *hn, int n)
{
    NODE *cn, *nn;
    int i;           // int i, was not defined, more correction fixed 
    for(i=0;i<n;i++);
    {
        nn=createnewnode();
        if(hn==NULL)
        {
            hn=nn;
        }
else
        {
            cn->next==nn;
        }
    cn=nn;
    return(hn);
}
}
//Display of The Data
void display(NODE *hn)
{

    NODE *cn;
    for(cn=hn;cn!=NULL;cn=cn->next)
    {
        printf("\t %d", cn->data);
    }
}

//Linear Searching
void search(NODE *hn, int n)
{
    NODE *cn;
    int i, x;
    printf("Enter the data to be found");
    scanf("%d",&x);
    i=0;
    while(i<n)
    {
        if(x==cn->data)
        {
            printf("Data found at %d",i+1);
            break;
        }

        cn=cn->next;
        i=i++;
    }
}

int  main()
{
    int n;
        NODE* hn=NULL;
    printf("Enter the number of nodes to be created");
    scanf("%d",&n);
    createlinkedlist(hn,n);
    display(hn);
    system("pause");
    return 0;
}
于 2015-11-17T07:36:36.603 回答