队列数据结构的基本操作函数有哪些
时间: 2023-03-19 10:24:28 浏览: 114
队列是一种先进先出(FIFO)的数据结构,基本操作函数包括:
1. Enqueue(入队):将新元素添加到队列的末尾,也就是队尾。
2. Dequeue(出队):从队列的开头,也就是队首,移除元素并返回该元素的值。
3. Peek(查看队首元素):返回队列中的第一个元素的值,但不会将其从队列中删除。
4. IsEmpty(判断队列是否为空):如果队列中没有任何元素,则返回 true,否则返回 false。
5. IsFull(判断队列是否已满):如果队列中的元素数量已经达到了其容量限制,则返回 true,否则返回 false。这个函数在使用固定大小的数组实现队列时很有用。
这些基本操作函数是队列数据结构的核心部分,它们使得我们能够有效地管理和操作队列中的数据。
相关问题
链接队列的基本操作函数
链接队列(Linked Queue)是一种基于链表实现的队列数据结构。下面是链接队列的基本操作函数:
1. 初始化队列:初始化一个空的链接队列。
```
void initQueue(LinkQueue *queue) {
queue->front = queue->rear = (QueueNode*) malloc(sizeof(QueueNode));
if (queue->front == NULL) {
printf("Memory allocation failed!\n");
exit(1);
}
queue->front->next = NULL;
}
```
2. 入队操作:将元素添加到队列尾部。
```
void enQueue(LinkQueue *queue, QueueElementType data) {
QueueNode *newNode = (QueueNode*) malloc(sizeof(QueueNode));
if (newNode == NULL) {
printf("Memory allocation failed!\n");
exit(1);
}
newNode->data = data;
newNode->next = NULL;
queue->rear->next = newNode;
queue->rear = newNode;
}
```
3. 出队操作:从队列头部删除元素并返回其值。
```
QueueElementType deQueue(LinkQueue *queue) {
if (queue->front == queue->rear) {
printf("Queue is empty!\n");
exit(1);
}
QueueNode *p = queue->front->next;
QueueElementType data = p->data;
queue->front->next = p->next;
if (queue->rear == p) {
queue->rear = queue->front;
}
free(p);
return data;
}
```
4. 获取队列头部元素:返回队列头部元素的值但不删除它。
```
QueueElementType getFront(LinkQueue *queue) {
if (queue->front == queue->rear) {
printf("Queue is empty!\n");
exit(1);
}
return queue->front->next->data;
}
```
5. 判断队列是否为空:如果队列为空则返回 true,否则返回 false。
```
bool isEmpty(LinkQueue *queue) {
return queue->front == queue->rear;
}
```
6. 清空队列:将队列中的所有元素删除并释放内存。
```
void clearQueue(LinkQueue *queue) {
while (!isEmpty(queue)) {
deQueue(queue);
}
}
```
数据结构中队列基本操作的完整代码
以下是队列基本操作的完整代码:
```
#include <stdio.h>
#include <stdlib.h>
// 队列结构体
typedef struct Queue
{
int front; // 队首指针
int rear; // 队尾指针
int size; // 队列大小
int *arr; // 队列数组指针
} Queue;
// 初始化队列
Queue *initQueue(int n)
{
Queue *Q = (Queue *)malloc(sizeof(Queue));
if (Q == NULL)
{
printf("初始化失败\n");
return NULL;
}
Q->front = 0;
Q->rear = 0;
Q->size = n;
Q->arr = (int *)malloc(sizeof(int) * n);
printf("初始化成功\n");
return Q;
}
// 判断队列是否为空
int isEmpty(Queue *Q)
{
return Q->front == Q->rear ? 1 : 0;
}
// 判断队列是否满了
int isFull(Queue *Q)
{
return (Q->rear + 1) % Q->size == Q->front ? 1 : 0;
}
// 入队
void enQueue(Queue *Q, int x)
{
if (isFull(Q))
{
printf("队列已满\n");
return;
}
Q->arr[Q->rear] = x;
Q->rear = (Q->rear + 1) % Q->size;
printf("入队成功:%d\n", x);
}
// 出队
int deQueue(Queue *Q)
{
if (isEmpty(Q))
{
printf("队列为空\n");
return -1;
}
int data = Q->arr[Q->front];
Q->front = (Q->front + 1) % Q->size;
printf("出队成功:%d\n", data);
return data;
}
// 打印队列元素
void printQueue(Queue *Q)
{
printf("当前队列元素为:");
for (int i = Q->front; i != Q->rear; i = (i + 1) % Q->size)
{
printf("%d ", Q->arr[i]);
}
printf("\n");
}
int main()
{
Queue *myQueue = initQueue(5);
enQueue(myQueue, 1);
enQueue(myQueue, 2);
enQueue(myQueue, 3);
enQueue(myQueue, 4);
enQueue(myQueue, 5);
enQueue(myQueue, 6); //队列已满,应该提示队列已满,而不是入队成功:6
printQueue(myQueue);
deQueue(myQueue);
deQueue(myQueue);
printQueue(myQueue);
enQueue(myQueue, 6);
enQueue(myQueue, 7);
printQueue(myQueue);
return 0;
}
```
这个代码实现了队列的基本操作:初始化队列、判断队列是否为空、判断队列是否满了、入队、出队、打印队列元素。你可以在编程中调用这些函数来实现队列的功能。