如何打印我的双向链表
How to print my Doubly-Linked List
首先,我要说我非常感谢这个论坛。本科期间来这里咨询的次数都数不清了
好的,所以语言是 C。我有一个双向链表 (ready_list),我想打印它的内容。由于我认为不在我的问题范围内的原因,这些列表(还有其他 4 个)已在全球范围内宣布。
以下是我声明结构的代码段。在 SIGHUP 信号处理程序中的代码底部,我试图从我的链表中打印我的节点数据。我的编程环境告诉我有一些错误。有人介意看看它并让我知道我在哪里犯了错误吗?
提前致谢,
达雷尔
typedef struct ready_node { //ready process nodes
void *data;
struct ready_node *next;
struct ready_node *prev;
} ready_node;
typedef struct ready_printer { //ready process list pointer for printing
void *data;
struct ready_printer *next;
struct ready_printer *prev;
} ready_printer;
typedef struct ready_list{ //ready process list
ready_node *head;
ready_node *tail;
} ready_list;
typedef struct {
char name[NAME_MAX];
int lifetime;
} pcb_t;
void sig_handler(int signal) { //signal handlers
if (signal == SIGALRM)
printf("recieved SIGALRM\n");
else if (signal == SIGUSR1)
printf("recieved SIGUSR1\n");
else if (signal == SIGUSR2)
printf("revieved SIGUSR2\n");
else if (signal == SIGHUP) {
printf("recieved SUGHUP\n");
ready_printer = ready_list; // <- Expected Identifier or ‘('
while (ready_printer != NULL) { // <- Unexpected type name ‘ready_printer’:expected expression
printf("%d", ready_printer->data);
ready_printer=ready_printer->next; // <- Expected Identifier or ‘('
}
}
}
更新
好的,现在我理解了 typdef 和 struct 的含义,现在我有以下内容:
typedef struct {
int data;
void *next;
void *prev;
} ready_node;
typedef struct {
ready_node *head;
ready_node *tail;
} list;
list ready_list;
static int sighup_flag = 0;
void sig_handler(int signal) { //signal handlers
if (signal == SIGALRM)
printf("recieved SIGALRM\n");
else if (signal == SIGUSR1)
printf("recieved SIGUSR1\n");
else if (signal == SIGUSR2)
printf("revieved SIGUSR2\n");
else if (signal == SIGHUP)
sighup_flag = 1;
}
...
main prog
...
if (sighup_flag == 1) {
printf("recieved SIGHUP\n");
ready_node *printer = ready_list.head;
while (printer != NULL) {
printf("%d", printer->data);
printer = printer->next;
}
}
非常感谢您的帮助。布鲁格提出的问题为我指明了正确的方向。像往常一样,这是 'receive' 帮助的好地方。 :)
ready_printer 被声明为类型而不是变量。假设在 ready_printer 列表的头部某处声明了一个变量:
struct ready_printer *ready_printer_head;
您需要像这样在 sig_handler 中声明一个变量:
struct ready_printer *p = NULL
然后在 SIGHUP 的处理程序中:
p = ready_list_head;
while (p) {
printf("%d", p->data);
p = p->next; <— Expected Identifier or ‘('
}
请注意,在 C 中您不必说 (p != NULL)。你直接说(p)也是一样的
首先,我要说我非常感谢这个论坛。本科期间来这里咨询的次数都数不清了
好的,所以语言是 C。我有一个双向链表 (ready_list),我想打印它的内容。由于我认为不在我的问题范围内的原因,这些列表(还有其他 4 个)已在全球范围内宣布。
以下是我声明结构的代码段。在 SIGHUP 信号处理程序中的代码底部,我试图从我的链表中打印我的节点数据。我的编程环境告诉我有一些错误。有人介意看看它并让我知道我在哪里犯了错误吗?
提前致谢, 达雷尔
typedef struct ready_node { //ready process nodes
void *data;
struct ready_node *next;
struct ready_node *prev;
} ready_node;
typedef struct ready_printer { //ready process list pointer for printing
void *data;
struct ready_printer *next;
struct ready_printer *prev;
} ready_printer;
typedef struct ready_list{ //ready process list
ready_node *head;
ready_node *tail;
} ready_list;
typedef struct {
char name[NAME_MAX];
int lifetime;
} pcb_t;
void sig_handler(int signal) { //signal handlers
if (signal == SIGALRM)
printf("recieved SIGALRM\n");
else if (signal == SIGUSR1)
printf("recieved SIGUSR1\n");
else if (signal == SIGUSR2)
printf("revieved SIGUSR2\n");
else if (signal == SIGHUP) {
printf("recieved SUGHUP\n");
ready_printer = ready_list; // <- Expected Identifier or ‘('
while (ready_printer != NULL) { // <- Unexpected type name ‘ready_printer’:expected expression
printf("%d", ready_printer->data);
ready_printer=ready_printer->next; // <- Expected Identifier or ‘('
}
}
}
更新
好的,现在我理解了 typdef 和 struct 的含义,现在我有以下内容:
typedef struct {
int data;
void *next;
void *prev;
} ready_node;
typedef struct {
ready_node *head;
ready_node *tail;
} list;
list ready_list;
static int sighup_flag = 0;
void sig_handler(int signal) { //signal handlers
if (signal == SIGALRM)
printf("recieved SIGALRM\n");
else if (signal == SIGUSR1)
printf("recieved SIGUSR1\n");
else if (signal == SIGUSR2)
printf("revieved SIGUSR2\n");
else if (signal == SIGHUP)
sighup_flag = 1;
}
...
main prog
...
if (sighup_flag == 1) {
printf("recieved SIGHUP\n");
ready_node *printer = ready_list.head;
while (printer != NULL) {
printf("%d", printer->data);
printer = printer->next;
}
}
非常感谢您的帮助。布鲁格提出的问题为我指明了正确的方向。像往常一样,这是 'receive' 帮助的好地方。 :)
ready_printer 被声明为类型而不是变量。假设在 ready_printer 列表的头部某处声明了一个变量:
struct ready_printer *ready_printer_head;
您需要像这样在 sig_handler 中声明一个变量:
struct ready_printer *p = NULL
然后在 SIGHUP 的处理程序中:
p = ready_list_head;
while (p) {
printf("%d", p->data);
p = p->next; <— Expected Identifier or ‘('
}
请注意,在 C 中您不必说 (p != NULL)。你直接说(p)也是一样的