队列的实现及基本操作pta(C语言)(队列)
时间: 2023-11-27 14:03:48 浏览: 110
队列是一种数据结构,它是一种先进先出(FIFO)的线性数据结构。队列只允许在队列的一端进行插入操作,称为队尾,而在另一端进行删除操作,称为队头。下面是队列的实现及基本操作。
1. 队列的结构定义
```c
#define MAXSIZE 100 // 队列最大容量
typedef struct {
int data[MAXSIZE]; // 队列元素数组
int front; // 队头指针
int rear; // 队尾指针
} Queue;
```
2. 初始化队列
```c
void initQueue(Queue *q) {
q->front = q->rear = 0; // 队头和队尾指针初始化为0
}
```
3. 判断队列是否为空
```c
int isEmpty(Queue *q) {
return q->front == q->rear;
}
```
4. 判断队列是否已满
```c
int isFull(Queue *q) {
return (q->rear + 1) % MAXSIZE == q->front;
}
```
5. 入队操作
```c
int enqueue(Queue *q, int x) {
if (isFull(q)) // 队列已满,无法插入
return 0;
q->data[q->rear] = x; // 插入元素到队尾
q->rear = (q->rear + 1) % MAXSIZE; // 队尾指针加1
return 1;
}
```
6. 出队操作
```c
int dequeue(Queue *q, int *x) {
if (isEmpty(q)) // 队列为空,无法删除
return 0;
*x = q->data[q->front]; // 取出队头元素
q->front = (q->front + 1) % MAXSIZE; // 队头指针加1
return 1;
}
```
7. 获取队头元素
```c
int getFront(Queue *q, int *x) {
if (isEmpty(q)) // 队列为空
return 0;
*x = q->data[q->front]; // 取出队头元素
return 1;
}
```
8. 获取队列长度
```c
int getLength(Queue *q) {
return (q->rear - q->front + MAXSIZE) % MAXSIZE;
}
```
9. 输出队列元素
```c
void printQueue(Queue *q) {
if (isEmpty(q)) // 队列为空
return;
int i = q->front;
while (i != q->rear) {
printf("%d ", q->data[i]);
i = (i + 1) % MAXSIZE;
}
printf("\n");
}
```
以上就是队列的实现及基本操作。在使用队列时,需要注意队列的容量大小,避免队列溢出。
阅读全文