如何打印出双向链表(ADT que)?

时间:2014-03-11 18:18:03

标签: c pointers linked-list adt doubly-linked-list

我正在制作和ADT阙,想要像你们这样打印出所有的阙。 这是我的结构:

typedef int kintyr;

typedef struct qElem {
    struct qElem *prv;          
    kintyr *dat;                    

}qElem;

   typedef struct que {
    qElem *fr,*bk;              
    int cnt;                    
}que;

我把元素放到了que中,但是当我想将它们打印到屏幕上时,我会遇到某种内存错误:

void show(que *q)
{

do
    {
            printf( "%d\n", temp->bk->dat );
              q->fr = q->fr->prv;
            q->cnt--;
    }
    while (q->cnt != 0);

}

我只获得一个元素然后编程崩溃。任何解决方案?

1 个答案:

答案 0 :(得分:0)

首先,您的插入代码可能有问题,因此需要验证。根据信息,您的show()代码也不正确。您正在修改Q中的q->fr = q->fr->prv指针,从而修改队列内容。此外,您不应该减少队列大小q->cnt--;这应该在删除节点时完成。


void show(que *q)
{
    qElem *ptr = q->fr;
    while (ptr != NULL) { /*assuming that last node's fr pointer is NULL*/
        printf("%d\n, *(ptr->dat)");
        ptr = ptr->fr; /*going forward*/
    }
}