c/c++语言开发共享如何在c中的链表中实现队列?

我得到了这些结构声明,以实现使用循环链表的队列集合。

typedef struct intnode { int value; struct intnode *next; } intnode_t; typedef struct { intnode_t *rear; // Points to the node at the tail of the // queue's linked list int size; // The # of nodes in the queue's linked list } intqueue_t; intnode_t *intnode_construct(int value, intnode_t *next) { intnode_t *p = malloc(sizeof(intnode_t)); assert (p != NULL); p->value = value; p->next = next; return p; } /* Return a pointer to a new, empty queue. * Terminate (via assert) if memory for the queue cannot be allocated. */ intqueue_t *intqueue_construct(void) { intqueue_t *queue = malloc(sizeof(intqueue_t)); assert(queue != NULL); queue->rear = NULL; queue->size = 0; return queue; } 

我正在尝试创建一个将在指定值中排队的函数(将其附加到队列的后面),我需要考虑队列为空且队列有一个或多个元素的两种情况。 这是我到目前为止的代码:

 void intqueue_enqueue(intqueue_t *queue, int value) { intnode_t *p = intnode_construct(value, NULL); if(queue->rear->next == NULL) { //the queue is empty queue->rear->next =p; } else { //the queue is not empty queue->rear=p; } queue->rear=p; queue->size++; } 

这段代码给了我一个运行时错误,所以我不确定什么是错的。 在代码中,我假设queue-> rear-> next是前面的,但我认为这是问题所在。 非常感谢所有帮助。 谢谢!

UPDATE–

我试图重做代码并得到了这个:

 void intqueue_enqueue(intqueue_t *queue, int value) { assert(queue!=NULL); intnode_t *p = intnode_construct(value,NULL); if (queue->size==0){ queue->rear=p; queue->size++; queue->rear->next=p; free(p); } else { p->next = queue->rear; queue->rear=p; queue->size++; free(p); } } 

这仅在空时有效,但在非空时无效。

    链表中的循环队列

    你的代码太大而无法读出,所以我在这里用来实现循环队列:

    #include using namespace std;

     // Structure of a Node struct Node { int data; struct Node* link; }; struct Queue { struct Node *front, *rear; }; // Function to create Circular queue void enQueue(Queue *q, int value) { struct Node *temp = new Node; temp->data = value; if (q->front == NULL) q->front = temp; else q->rear->link = temp; q->rear = temp; q->rear->link = q->front; } // Function to delete element from Circular Queue int deQueue(Queue *q) { if (q->front == NULL) { printf ("Queue is empty"); return INT_MIN; } // If this is the last node to be deleted int value; // Value to be dequeued if (q->front == q->rear) { value = q->front->data; free(q->front); q->front = NULL; q->rear = NULL; } else // There are more than one nodes { struct Node *temp = q->front; value = temp->data; q->front = q->front->link; q->rear->link= q->front; free(temp); } return value ; } // Function displaying the elements of Circular Queue void displayQueue(struct Queue *q) { struct Node *temp = q->front; printf("nElements in Circular Queue are: "); while (temp->link != q->front) { printf("%d ", temp->data); temp = temp->link; } printf("%d", temp->data); } /* Driver of the program */ int main() { // Create a queue and initialize front and rear Queue *q = new Queue; q->front = q->rear = NULL; // Inserting elements in Circular Queue enQueue(q, 14); enQueue(q, 22); enQueue(q, 6); // Display elements present in Circular Queue displayQueue(q); // Deleting elements from Circular Queue printf("nDeleted value = %d", deQueue(q)); printf("nDeleted value = %d", deQueue(q)); // Remaining elements in Circular Queue displayQueue(q); enQueue(q, 9); enQueue(q, 20); displayQueue(q); return 0; } 

      以上就是c/c++开发分享如何在c中的链表中实现队列?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/560860.html

      (0)
      上一篇 2021年1月28日
      下一篇 2021年1月28日

      精彩推荐