WYHfighting @ 2021-02-04 11:14:30
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int a[100005];
node* next;
}node,*LinkList;
LinkList L;
void CreatListHead()
{
LinkList p;
int i;
L=(LinkList)malloc(sizeof(node));
L->next=NULL;
for(i=1;i<=100000;i++)
{
p=(LinkList)malloc(sizeof(node));
p->next=L->next;
L->next=p;
}
}
void ListInsert(int i,int j,int e)
{
int num;
LinkList p,s;
p=L;
num=1;
while(p&&num<i)
{
p=p->next;
++num;
}
p->a[j]=e;
}
int GetElem(int i,int n)
{
int j=1;
LinkList p;
p=L;
while(p&&j<i)
{
p=p->next;
j++;
}
return p->a[n];
}
int main(){
int n,m,sign,i,j,k;
scanf("%d%d",&n,&m);
CreatListHead();
while(m--)
{
scanf("%d",&sign);
if(sign==1)
{
scanf("%d%d%d",&i,&j,&k);
ListInsert(i,j,k);
}
else
{
scanf("%d%d",&i,&j);
k=GetElem(i,j);
printf("%d\n",k);
}
}
return 0;
}
我模仿《大话数据结构》这本书上写的链表,但是提交时会出现这个错误: /tmp/compiler_7z6___il/src:6:2: 错误:未知的类型名‘node’ node* next; 求助大佬,应该怎么改
by Terrible @ 2021-02-04 11:28:15
我这里C++和C编译都是对的
by WYHfighting @ 2021-02-04 11:51:06
@Terrible /tmp/compiler_068u_26n/src:6:5: 错误:未知的类型名‘node’ node* next; ^~~~
/tmp/compiler_068u_26n/src: 在函数‘CreatListHead’中:
/tmp/compiler_068u_26n/src:20:16: 警告:assignment to ‘int ’ from incompatible pointer type ‘LinkList’ {或称 ‘struct node ’} [-Wincompatible-pointer-types] L->next=p; ^
/tmp/compiler_068u_26n/src: 在函数‘ListInsert’中:
/tmp/compiler_068u_26n/src:31:10: 警告:assignment to ‘LinkList’ {或称 ‘struct node ’} from incompatible pointer type ‘int ’ [-Wincompatible-pointer-types] p=p->next; ^ /tmp/compiler_068u_26n/src:26:16: 警告:未使用的变量‘s’ [-Wunused-variable] LinkList p,s; ^ /tmp/compiler_068u_26n/src: 在函数‘GetElem’中: /tmp/compiler_068u_26n/src:43:10: 警告:assignment to ‘LinkList’ {或称 ‘struct node ’} from incompatible pointer type ‘int ’ [-Wincompatible-pointer-types] p=p->next; ^
by WYHfighting @ 2021-02-04 11:52:13
@Terrible 我提交是这样的; ?
by Terrible @ 2021-02-04 13:07:05
@WYHfighting
我是说我这里本地可以编译,但是洛谷IDE是不行的。(可能本地编译器默认了许多东西)
node既是类型名又是变量名,LinkList是指针变量名,而不是类型名。很明显是有问题。
如果书上这么写的话,可能有他自己的道理,我这里的编译器就编译成功了。不过洛谷的话重写一下吧。
by WYHfighting @ 2021-02-04 14:00:17
@Terrible 应该怎么改呢? 我就是按书上讲的自己写成这样,本地也通过了。
LinkList应该没问题,我在网上搜到过这种用法的解释,他是这样说的:
typedef int INT,LPINT; 前面那个你懂得,我讲述后面那个,你可以这么理解 LPINT前面有个号说明是用来定义指针 变量的,因为 int 等价于LPINT 所以LPINT加上间访内存后才于int等价,所以LPINT等价于: int ;例如 int a;等价于 LPINT a;
我理解就是在定义结构体node时,不能使用定义的node类型;
就是我一开始写定义结构体是这样的:
typedef struct
{
int a[100005];
node* next;
}node,*LinkList;
本地也显示了类似的错误; 然后我在struct后面加上了node本地就能过了,但是洛谷还是过不了。
typedef struct node
{
int a[100005];
node* next;
}node,*LinkList;
by WYHfighting @ 2021-02-04 14:03:24
@Terrible 网上解释的格式是
typedef int INT,*LPINT;
不用代码表示洛谷会把那个星号消掉
by WYHfighting @ 2021-02-04 14:04:55
@Terrible 就是```c LinkList s;等价于 node* s;
by Terrible @ 2021-02-04 15:11:19
@WYHfighting
C语言和特殊用法我也不是很精通,你自己在IDE里面试试改改,编译一下,网上的标准不一定能在洛谷编译通过,评测机语言环境。
洛谷IDE
by WYHfighting @ 2021-02-04 16:49:55
@Terrible 好的,谢谢你!