C语言中链表的正向链接
您好,这里是一个“新手C”开发人员,我正在寻找一些帮助,以将这个用Pascal编写的程序翻译成C:C语言中链表的正向链接,c,linked-list,C,Linked List,您好,这里是一个“新手C”开发人员,我正在寻找一些帮助,以将这个用Pascal编写的程序翻译成C: type T = ^list; list=record info: integer; next: T; end; var L,P: T; i,ui,n: integer; begin write('Enter number of elements in your list: '); readln(n); writeln; New(L); //Creating a node P := L
type T = ^list;
list=record
info: integer;
next: T;
end;
var
L,P: T; i,ui,n: integer;
begin
write('Enter number of elements in your list: '); readln(n);
writeln;
New(L); //Creating a node
P := L; //assining P as a pointer
i:= 1;
while (i <= n) do
begin
writeln('enter a number: '); readln(ui);
P^.info:= ui;
new (P^.next); // creat a second node and automaticaly chain it to the previous one which means
P^.next:= new created P
P:= P^.next;
i:= i + 1;
end;
P^.next:= nil;
P:= L;
writeln('your list looks like this: ');
while (P <> nil) do
begin
write(P^.info,' ');
P:= P^.next;
end;
readln;
end.
此指令的作用基本上是创建另一个节点并将其链接到上一个节点,而不是创建临时节点,然后自己编写链接代码,就像您所说的:
P^.next:= new created node;
我可以更详细地说,我想知道如何在C中替换此代码:
if(head==NULL)
head=p;
else
prev->next=p;
prev=p;
然后用简单的指令编写,比如用pascal编写的on
新的(p^下一页)
我相当肯定:
if(head==NULL)
head=p;
else
prev->next=p;
prev=p;
与此不同:
new(P^.next);
但是如果你想要一个相当于new(p^.next)代码>,您可以使用malloc
分配内存:
p->next = malloc(sizeof(*p->next));
您应该确保检查malloc
返回的指针是否也是NULL
:
if(!p->next)
{
perror("malloc()");
return EXIT_FAILURE;
}
我相当肯定:
if(head==NULL)
head=p;
else
prev->next=p;
prev=p;
与此不同:
new(P^.next);
但是如果你想要一个相当于new(p^.next)代码>,您可以使用malloc
分配内存:
p->next = malloc(sizeof(*p->next));
您应该确保检查malloc
返回的指针是否也是NULL
:
if(!p->next)
{
perror("malloc()");
return EXIT_FAILURE;
}
你至少需要用C语言来描述一下。我们不能为你做所有的工作。我认为C语言中没有任何东西可以与之等效。那么new(P^.next)和new(P^.next)在功能上有什么区别代码>和P^.next:=新创建的节点代码>?@interjay的不同之处在于,如果不使用new(P^.next),代码如下所示:new(temp);下一步:=温度;p:=温度;基本上,您必须创建一个临时指针并在整个过程中使用它。如果这是关于保存一行,您可以只编写p->next=malloc(sizeof(struct node))代码>在一行中。如果没有,那我就不明白你在问什么。你至少需要用C来描述一下。我们不能为你做所有的工作。我不认为在C中有任何东西可以等同于这一点。那么new(P^.next)和new(P^.next)在功能上有什么区别代码>和P^.next:=新创建的节点代码>?@interjay的不同之处在于,如果不使用new(P^.next),代码如下所示:new(temp);下一步:=温度;p:=温度;基本上,您必须创建一个临时指针并在整个过程中使用它。如果这是关于保存一行,您可以只编写p->next=malloc(sizeof(struct node))代码>在一行中。如果不是,那我不明白你在问什么。