帮我用c语言实现以下内容:链队列、循环队列的创建、入队、出队、获取队头元素、判断 队列是否为空、访问等运算。
时间: 2024-10-19 12:06:01 浏览: 13
在C语言中,我们可以使用结构体和指针来实现链队列和循环队列。这里是一个简单的例子:
1. **链队列**:
```c
typedef struct Node {
int data; // 存储数据
struct Node* next; // 指向下一个节点的指针
} QueueNode;
typedef struct Queue {
QueueNode* front; // 队首指针
QueueNode* rear; // 队尾指针
} Queue;
```
2. **创建**:
```c
Queue createQueue() {
Queue q;
q.front = NULL;
q.rear = NULL;
return q;
}
```
3. **入队**(enqueue):
```c
void enqueue(Queue* q, int data) {
if (q->rear == NULL) {
q->front = q->rear = new QueueNode(); // 如果队空,创建新节点并指向它
} else {
QueueNode* newNode = new QueueNode();
newNode->data = data;
newNode->next = q->rear; // 新节点接在队尾
q->rear->next = newNode;
q->rear = newNode; // 更新队尾
}
}
```
4. **出队**(dequeue):
```c
int dequeue(Queue* q) {
if (q->front == NULL) {
printf("Queue is empty.\n");
return -1;
} else {
int data = q->front->data;
QueueNode* temp = q->front;
q->front = q->front->next; // 移动队首到下一个节点
delete temp; // 删除已处理的节点
return data;
}
}
```
5. **获取队头元素**(peek):
```c
int getFront(Queue* q) {
if (q->front == NULL) {
printf("Queue is empty.\n");
return -1;
} else {
return q->front->data;
}
}
```
6. **判断队列是否为空**:
```c
int isEmpty(Queue q) {
return q.front == NULL;
}
```
7. **访问**(查看队列长度):
由于链队列没有固定大小,这个操作需要遍历整个队列,通常我们会用递归或者额外记录一个计数器来实现,但这不是标准操作,因为链队列没有直接提供这种方法。
阅读全文