c语言建立队列的链式存储结构,进行入队和出队的操作。输出队列中每个数,数据之间空格分隔。
时间: 2024-05-05 13:19:07 浏览: 98
c语言实现链表的基本操作,链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。
好的,这是一个关于数据结构的问题,我可以为您解答。对于队列的链式存储结构来说,我们一般需要定义一个结构体来表示队列中的每一个元素,包括该元素的值和指向下一个元素的指针。入队操作可以通过在队列尾部添加一个新元素来完成,出队可以通过删除队列头部的元素来完成。以下是一个简单的c语言实现:
```
#include <stdio.h>
#include <stdlib.h>
typedef struct queue_node {
int data;
struct queue_node* next;
} QueueNode;
typedef struct queue {
QueueNode* head;
QueueNode* tail;
} Queue;
void enqueue(Queue* q, int data) {
// Create a new node
QueueNode* new_node = (QueueNode*) malloc(sizeof(QueueNode));
new_node->data = data;
new_node->next = NULL;
// If the queue is empty, make the new node the head of the queue
if (q->head == NULL) {
q->head = new_node;
q->tail = new_node;
}
// Otherwise, add the new node to the end of the queue
else {
q->tail->next = new_node;
q->tail = new_node;
}
}
int dequeue(Queue* q) {
if (q->head == NULL) {
printf("Queue is empty\n");
return -1;
}
QueueNode* node = q->head;
int data = node->data;
q->head = q->head->next;
// If the queue is now empty, reset the tail pointer as well
if (q->head == NULL) {
q->tail = NULL;
}
free(node);
return data;
}
void print_queue(Queue* q) {
QueueNode* current = q->head;
while (current != NULL) {
printf("%d ", current->data);
current = current->next;
}
printf("\n");
}
int main() {
Queue q = {NULL, NULL};
enqueue(&q, 1);
enqueue(&q, 2);
enqueue(&q, 3);
print_queue(&q);
dequeue(&q);
print_queue(&q);
enqueue(&q, 4);
print_queue(&q);
return 0;
}
```
以上代码实现了队列的链式存储结构,并包括了基本的入队、出队和打印队列的操作。希望能对您有所帮助。
阅读全文