链接列表无法正常工作
问题描述:
这是一个基本链接列表,它添加节点然后打印它们,但由于某些原因它无法正常工作。从我测试过的东西打印出列表后,它会失败,直到打印工资的地方打印不正确的数字,然后终止。链接列表无法正常工作
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node_s {
char job_title[25];
double hourly_wage;
struct node_s *next;
} node_t;
void print_list(node_t *list);
void add_node(node_t **head, char *title, double hwage);
int main()
{
node_t *list;
list = NULL;
add_node(&list, "Programmer", 32.35);
print_list(list);
add_node(&list, "Analyst", 25.80);
print_list(list);
add_node(&list, "Technician", 17.50);
print_list(list);
add_node(&list, "Clerk", 12.00);
print_list(list);
add_node(&list, "Manager", 53.58);
print_list(list);
return(0);
}
void print_list(node_t *list){
node_t *current;
if (current == NULL) {
printf("\n");
}else{
printf("The job is called:%s\n", current->job_title);
printf("The job pays %d hourly.\n", current->hourly_wage);
print_list(current->next);
}
}
void add_node(node_t **head, char *title, double hwage){
node_t *current = head;
node_t *newNode = (node_t *) malloc(sizeof(node_t));
if (newNode == NULL) {
printf("malloc failed\n");
exit(-1);
}
strcpy(newNode->job_title, title);
newNode->hourly_wage = hwage;
newNode->next = NULL;
while (current->next) {
current = current->next;
}
current->next = newNode;
}
答
在下面的部分代码:
void print_list(node_t *list){
node_t *current;
if (current == NULL) {
你比较空当前指针的初始化值。我想你忘了给它赋值:
current = list;
如果指令前。
答
更改功能通过以下方式
void print_list(node_t *list)
{
if (list == NULL)
{
printf("\n");
}
else
{
printf("The job is called:%s\n", list->job_title);
printf("The job pays %f hourly.\n", list->hourly_wage);
print_list(list->next);
}
}
void add_node(node_t **head, const char *title, double hwage)
{
node_t *newNode = (node_t *)malloc(sizeof(node_t));
if (newNode == NULL)
{
printf("malloc failed\n");
exit(-1);
}
strncpy(newNode->job_title, title, 25);
newNode->job_title[24] = '\0';
newNode->hourly_wage = hwage;
newNode->next = NULL;
while (*head)
{
head = &(*head)->next;
}
*head = newNode;
}
这里是一个示范项目
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node_s {
char job_title[25];
double hourly_wage;
struct node_s *next;
} node_t;
void print_list(node_t *list)
{
if (list == NULL)
{
printf("\n");
}
else
{
printf("The job is called:%s\n", list->job_title);
printf("The job pays %f hourly.\n", list->hourly_wage);
print_list(list->next);
}
}
void add_node(node_t **head, const char *title, double hwage)
{
node_t *newNode = (node_t *)malloc(sizeof(node_t));
if (newNode == NULL)
{
printf("malloc failed\n");
exit(-1);
}
strncpy(newNode->job_title, title, 25);
newNode->job_title[24] = '\0';
newNode->hourly_wage = hwage;
newNode->next = NULL;
while (*head)
{
head = &(*head)->next;
}
*head = newNode;
}
int main(void)
{
node_t *list;
list = NULL;
add_node(&list, "Programmer", 32.35);
print_list(list);
add_node(&list, "Analyst", 25.80);
print_list(list);
add_node(&list, "Technician", 17.50);
print_list(list);
add_node(&list, "Clerk", 12.00);
print_list(list);
add_node(&list, "Manager", 53.58);
print_list(list);
return 0;
}
输出是
The job is called:Programmer
The job pays 32.350000 hourly.
The job is called:Programmer
The job pays 32.350000 hourly.
The job is called:Analyst
The job pays 25.800000 hourly.
The job is called:Programmer
The job pays 32.350000 hourly.
The job is called:Analyst
The job pays 25.800000 hourly.
The job is called:Technician
The job pays 17.500000 hourly.
The job is called:Programmer
The job pays 32.350000 hourly.
The job is called:Analyst
The job pays 25.800000 hourly.
The job is called:Technician
The job pays 17.500000 hourly.
The job is called:Clerk
The job pays 12.000000 hourly.
The job is called:Programmer
The job pays 32.350000 hourly.
The job is called:Analyst
The job pays 25.800000 hourly.
The job is called:Technician
The job pays 17.500000 hourly.
The job is called:Clerk
The job pays 12.000000 hourly.
The job is called:Manager
The job pays 53.580000 hourly.
你只需要编写函数,将删除所有分配的内存为清单。
'node_t * current = head;'头部类型为'node_t **'。 – 2014-11-21 20:42:28
您的打印方法无法初始化“当前”;它拥有垃圾,因此行为未定义。 – 2014-11-21 20:46:28
@Ieaturaw不要忘记标记我的答案是最好的,因为我相信你会使用我展示的代码。 – 2014-11-21 21:10:56