Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中链表的正向链接_C_Linked List - Fatal编程技术网

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

您好,这里是一个“新手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; //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))在一行中。如果不是,那我不明白你在问什么。