创建一个存储列表大小的链表

时间:2011-08-19 19:22:58

标签: c linked-list

我需要创建一个存储整数数据的链表。此列表还需要知道其大小(列表中的项目数)。

这是我的代码。

linked.h文件

typedef struct node Node;
struct node{
int a;
Node* b;
};
Node m;

typedef struct {
node* head;
int size;
}list;
list list1;

主文件

#include <stdio.h>
#include "linked.h"
list init(list list1)
{
  list1.head = null;
  list1.size = 0;
  return list1;
}

void main()
{
list1=init(list1);
printf("%d",list1.size);
}

现在正在运行,结果是 - “无法创建进程”, 在Windows上使用Turbo C.

  • 为什么我得到这个结果?
  • 为什么没有创建流程?
  • 另外,这是我应该如何初始化链表吗?

2 个答案:

答案 0 :(得分:1)

有两个错误:首先,您应该写Node* head;而不是node* head;,其次,您应该写NULL0而不是null

可能你的编译器消息被某种方式抑制了。

而且,是的,这就是你如何发起链表,但是

list init(void)
{
    list list1;
    list1.head = null;
    list1.size = 0;
    return list1;
}

会更好。

也可以进行其他改进。

答案 1 :(得分:0)

您的标头不应定义list list1;,尽管它可能会声明extern list list1;。但是,为了通常可重用,标头不应声明变量。 (见What are extern variables in C。)

您的标题中应包含多个包含警戒。 (见Should I use #include in headers。)

您的标题应声明为操作列表而提供的函数。

您应该有一个实现文件来实现列表操作函数(linked.c将与标题名称linked.h一致)。然后主程序将简单地使用这些功能。

您的main()程序通常应该有返回类型int;这是标准C所要求的。您的编译器可能有另一种选择。

如果您的类型始终大写,而不是使用Nodelist,那就太好了。

您的init()功能命名不佳。它的设计也很差。您不需要输入值和返回值。您的代码将传入的结构视为一个方便分配的局部变量,并将其初始化并将其复制回来;它也可以在没有参数的情况下工作,并且list list1;被定义为局部变量。并且您应该避免在参数列表中使用与全局变量相同的名称(或作为局部变量)。编译器不会被它混淆;你可能是。使用它会更常规:

static void list_init(list *new_list)
{
    new_list->head = 0;
    new_list->size = 0;
}

list_init(&list1);

尽管如此,仍然没有明显的理由说你的程序不会运行。

一个奇怪的可能性是你的init()函数混淆了通常运行它自己的函数init()的运行时,并且你的初始化没有按照编译器的期望进行。

否则,你能编译并运行任何程序 - 一个'Hello World'程序吗?如果你可以编译和运行程序,那么你的程序就会对系统产生不利影响 - init()函数占据中心位置。如果你不能运行一个简单的'Hello Program',那么你需要修改你的编译器安装。