首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >队列/脱队列/插入结构在队列中

队列/脱队列/插入结构在队列中
EN

Stack Overflow用户
提问于 2016-06-18 12:49:00
回答 1查看 2.4K关注 0票数 1

我有一个包含指针next的结构。我正在尝试建立一个结构队列,但是当我调用enqueue/dequeue时,我最终会遇到错误,试图写入信息;并且不知道这是否是enque/dequeue/insert造成的。只是学习C,对free/malloc不太确定,或者是否有必要。Insert基于int值(最小值优先)。

代码语言:javascript
复制
struct queue { 
    struct RCB* front; 
    struct RCB* back; 
};

/*Initialize queue */ 
struct queue* new_queue(void){
    struct queue* tmp = malloc( 1 * sizeof(tmp));  
    tmp->front = NULL; 
    tmp->back = NULL;
    return tmp;  
}

/*Add RCB to Queue FIFO */
struct queue* enqueue(struct queue* queue, struct RCB* rcb){
    if(queue->front == NULL && queue->back == NULL){
        queue->front = rcb; 
        queue->back = rcb;
            printf("added front to queue\n");  
        return queue; 
    }
    else {
        queue->back->next = rcb; 
        queue->back = rcb;
            printf("added to queue\n");  
    }
    return queue; 
} 

/*Remove RCB from Queue FIFO */ 
struct RCB* dequeue(struct queue* queue){
    struct RCB *tmp1 = (struct RCB *)malloc(sizeof(struct RCB)); 
    struct RCB *tmp2 = (struct RCB *)malloc(sizeof(struct RCB)); 
    if(queue->front == NULL && queue->back == NULL){
        printf("queue is empty\n"); 
    }   
    tmp1 = queue->front; 
    tmp2 = tmp1->next; 
    queue->front = tmp2; 
    if(queue->front == NULL){
        queue->back = queue->front;
            printf("removed rcb from queue\n");  
    }
    return tmp1; 
}
/*Insert RCB into Queue */ 
 struct queue* insert(struct queue* queue, struct RCB* rcb){
            if(queue->front == NULL && queue->back == NULL){
                queue->front = rcb; 
                queue->back = rcb;
                return queue; 
            }
            if(queue->front->next == NULL){
                queue->front->next = rcb; 
                return queue; 
            }

            struct RCB *tmp = (struct RCB *)malloc(sizeof(struct RCB));
                    tmp = queue->front; 
                        while(tmp->next->b2r < rcb->b2r || tmp->next == NULL){
                        tmp = tmp->next;
                    }
                    rcb->next = tmp->next; 
                    tmp->next = rcb; 

                    return queue; 
    }

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-18 13:30:35

  1. return value
  2. new_queue中,struct queue* tmp = malloc( 1 * sizeof(tmp));是错误的,因为这将分配一个具有指向struct queue的指针大小的缓冲区,而不是struct queue的大小,1*foo也根本没用。使用如下: struct queue* tmp = malloc(sizeof(*tmp));
  3. dequeue中,您正在分配两个struct RCB缓冲区,同时通过将它们分配给指针tmp1 and tmp1 (这些不是必需的),从而立即失去对它们的引用,并且您正在创建内存泄漏。你需要的只是两个指针: 结构RCB* dequeue(struct *队列){ struct * tmp1;struct * tmp2;if(queue->前线== NULL & queue->back == NULL) { printf("queue is ==\n“);}tmp1=queue-> tmp2;tmp2= tmp1->next;queue->tmp1=tmp2;如果(queue-> == NULL) { queue->back =queue-> from;printf(“从队列\n中删除rcb”);}返回tmp1;}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37897152

复制
相关文章

相似问题

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