首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >印刷结构

印刷结构
EN

Stack Overflow用户
提问于 2020-04-08 16:31:03
回答 2查看 125关注 0票数 1

我正在尝试打印一个双端队列(deque),这也是一个const。我的结构很简单:

代码语言:javascript
复制
struct node {
  int item;
  struct node *previous;
  struct node *next;
};

struct deque {
  struct node *start;
  struct node *end;
};

我对此的看法如下:

代码语言:javascript
复制
void deque_print(const struct deque *deq) {
  assert(deq);
  if (deq->start->item == deq->end->item) {
    printf("[%d]\n", deq->front->item);
  }
  else {
    printf("{");
    while (1) {
      printf("%d", deq->start->item);
      deq->start = deq->start->next; /// I know this is the problem
      printf(" ");
    }
    printf("}\n");
  }
}

正如代码注释中所指出的,我知道是哪一行导致了问题(因为deq的类型是const)。我想知道如何改进这一点,以便这可以打印。还请不要更改函数头/声明。

此外,该功能是打印所有的元素,正面到后面。它被花括号包围,每个元素在下一个元素之间都有一个空格。因此,如果从前到后的元素是1,2,3,4,5,那么输出应该是:

代码语言:javascript
复制
{1 2 3 4 5}

还有,别担心衣服是空的,我知道怎么做。我很好奇在德克里至少有一个元素。

对于第一个评论,我试着:

代码语言:javascript
复制
else {
    printf("{");
    struct llnode *temp = deq->start;
    while (1) {
      printf("%d", temp->item); /// problem
      temp = temp->next;
      if (temp == NULL) break;
      printf(" ");
    }
    printf("}\n");
  }

但还是没成功。我的打印功能给我带来了问题

EN

回答 2

Stack Overflow用户

发布于 2020-04-08 16:52:52

首先,您应该保存deque长度并在while循环中使用它,否则您将有一个segFault,因为while(1)将永远迭代。其次,我建议您使用一个时态节点作为迭代器,因为一旦打印了deque,就会丢失开始节点。

代码语言:javascript
复制
void deque_print(const struct deque *deq) {
  int i = 0;
  node *tmp_node = deq->start;
  printf("{");
  while (i < deq->length) { //assuming you have the variable in the struct
    printf("%d", tmp_node->item);
    tmp_node = tmp_node->next;
    printf(" ");
    i++;
  }
  printf("}\n");
  }
}
票数 0
EN

Stack Overflow用户

发布于 2020-04-08 17:09:49

代码语言:javascript
复制
void deque_print(const struct deque *deq)
{
    if (deq == NULL)
    {
        printf("{}");
        return;
    }

    const struct node *node = deq->start;
    const struct node *end = deq->end;

    printf("{");
    while (node)
    {
        if (node == end)
        {
            printf("%d", node->item);
        }
        else
        {
            printf("%d ", node->item);
        }
        node = node->next;
    }
    printf("}");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61105494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档