我正在尝试打印一个双端队列(deque),这也是一个const。我的结构很简单:
struct node {
int item;
struct node *previous;
struct node *next;
};
struct deque {
struct node *start;
struct node *end;
};我对此的看法如下:
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,那么输出应该是:
{1 2 3 4 5}还有,别担心衣服是空的,我知道怎么做。我很好奇在德克里至少有一个元素。
对于第一个评论,我试着:
else {
printf("{");
struct llnode *temp = deq->start;
while (1) {
printf("%d", temp->item); /// problem
temp = temp->next;
if (temp == NULL) break;
printf(" ");
}
printf("}\n");
}但还是没成功。我的打印功能给我带来了问题
发布于 2020-04-08 16:52:52
首先,您应该保存deque长度并在while循环中使用它,否则您将有一个segFault,因为while(1)将永远迭代。其次,我建议您使用一个时态节点作为迭代器,因为一旦打印了deque,就会丢失开始节点。
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");
}
}发布于 2020-04-08 17:09:49
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("}");
}https://stackoverflow.com/questions/61105494
复制相似问题