我的程序中有一个名为employee的结构,其定义如下:
struct employee {
int id;
int age;
struct *employee next;
};
我如何接受用户的输入,从输入创建结构,并使用指针创建单链表?我有很多问题要弄清楚如何动态地做这件事。在Java中,这可以通过构造函数轻松完成,但是如何在C中完成?
编辑:假设输入只是两个整数(id和年龄)。
答案 0 :(得分:1)
这是您创建新employee
结构的方法。您正在使用malloc
函数动态分配内存。
struct employee *new_employee = (struct employee*)malloc(sizeof(struct employee));
现在,我们需要将数据填充到新创建的employee
字段中:
new_employee -> id = input_id;
new_employee -> age = input_age;
对于next
指针,它通常被赋予NULL值。这是为了防止next
指针指向任意内存位置。
new_employee -> next = NULL;
最后,我们必须link
列表。为此,您必须将前一个员工字段的next
指针指向当前员工字段(例如:正如您在评论中提到的,第一个(9,3)具有指向第二个的下一个指针( 3,2))
由于它是一个单链表,我们无法回溯。因此,有两种方法可以访问上一个字段。
首先是维护一个指向链接列表最后一个字段的指针。
其次是遍历整个列表直到结束,当你到达最后一个元素时,改变它的next
指针。
第二种方法的实施:
node *temp = *start;
if(temp!=NULL)
{
while(temp -> next)
temp = temp -> next;
temp -> next = new_employee;
}
希望它有所帮助!
答案 1 :(得分:1)
注意: don't give me fish teach me how to fish
这是一个例子:
struct node {
int value;
struct *node next;
};
如何动态创建新的Node指针?
node* aux = (node*) malloc(sizeof(node));
如何(安全地)获取用户输入?
char line[256];
int i;
if (fgets(line, sizeof(line), stdin)) {
if (1 == sscanf(line, "%d", &i)) {
/* i can be safely used */
}
}
如何创建链接列表?
/* This will be the unchanging first node */
struct node *root;
/* Now root points to a node struct */
root = (struct node *) malloc( sizeof(struct node) );
/* The node root points to has its next pointer equal to a null pointer
set */
root->next = 0;
/* By using the -> operator, you can modify what the node,
a pointer, (root in this case) points to. */
root->value = 5;
如何将新节点添加到链接列表?
/* This won't change, or we would lose the list in memory */
struct node *root;
/* This will point to each node as it traverses the list */
struct node *conductor;
root = malloc( sizeof(struct node) );
root->next = 0;
root->value = 12;
conductor = root;
if ( conductor != 0 ) {
while ( conductor->next != 0)
{
conductor = conductor->next;
}
}
/* Creates a node at the end of the list */
conductor->next = malloc( sizeof(struct node) );
conductor = conductor->next;
if ( conductor == 0 )
{
printf( "Out of memory" );
return 0;
}
/* initialize the new memory */
conductor->next = 0;
conductor->value = 42;
现在您必须能够轻松解决问题。
快乐编码:D