繁体   English   中英

如何打印我的双向链接列表

[英]How to print my Doubly-Linked List

首先,我要说一下我对这个论坛的赞赏。 我无法数出我在本科期间来这里获得信息的次数。

好的,所以语言是C。我有一个双向链接列表(ready_list),我想打印其内容。 这些列表(还有4个)已在全球范围内声明,原因是我认为这不在我的问题范围内。

以下是我的代码声明结构的片段。 在SIGHUP的信号处理程序内的代码底部,我试图从链接列表中打印节点的数据。 我的编程环境告诉我有一些错误。 有人会介意看一下并让我知道我在哪里犯了错误吗?

在此先感谢,Darrell

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;
        }
    }

我非常感谢您的帮助。 布鲁塞格提出了一个向我指出正确方向的问题。 像往常一样,这是“接收”帮助的好地方。 :)

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)一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM