C语言数据结构与算法 实现顺序队列的各种基本操作
时间: 2023-11-03 15:07:14 浏览: 174
C语言数据结构与算法中,实现顺序队列的基本操作包括入队、出队、判断队列是否为空、判断队列是否已满、获取队头元素等操作。其中,顺序队列是一种基于数组实现的队列,它的特点是元素在队列中的位置是固定的,队列的头和尾都是可以移动的指针。以下是实现顺序队列的各种基本操作的方法:
1. 入队操作:将元素插入队列尾部,同时移动队列尾指针。
2. 出队操作:将队列头部元素删除,同时移动队列头指针。
3. 判断队列是否为空:当队列头指针和队列尾指针相同时,队列为空。
4. 判断队列是否已满:当队列尾指针指向队列的最后一个元素时,队列已满。
5. 获取队头元素:返回队列头部元素的值,但不删除该元素。
6. 获取队列长度:通过队列头指针和队列尾指针的位置关系计算得出队列长度。
以下是实现顺序队列的基本操作的代码实现:
```
#define MAXSIZE 100 // 定义队列的最大长度
typedef int DataType; // 定义队列元素的数据类型
typedef struct {
DataType data[MAXSIZE]; // 队列的元素数组
int front; // 队列头指针
int rear; // 队列尾指针
} SeqQueue;
// 初始化队列
void InitQueue(SeqQueue *Q) {
Q->front = Q->rear = 0;
}
// 判断队列是否为空
int IsEmpty(SeqQueue Q) {
return Q.front == Q.rear;
}
// 判断队列是否已满
int IsFull(SeqQueue Q) {
return (Q.rear + 1) % MAXSIZE == Q.front;
}
// 入队操作
int EnQueue(SeqQueue *Q, DataType x) {
if (IsFull(*Q)) {
return 0; // 队列已满,入队失败
}
Q->data[Q->rear] = x;
Q->rear = (Q->rear + 1) % MAXSIZE;
return 1; // 入队成功
}
// 出队操作
int DeQueue(SeqQueue *Q, DataType *x) {
if (IsEmpty(*Q)) {
return 0; // 队列为空,出队失败
}
*x = Q->data[Q->front];
Q->front = (Q->front + 1) % MAXSIZE;
return 1; // 出队成功
}
// 获取队头元素
int GetHead(SeqQueue Q, DataType *x) {
if (IsEmpty(Q)) {
return 0; // 队列为空,获取队头元素失败
}
*x = Q.data[Q.front];
return 1; // 获取队头元素成功
}
// 获取队列长度
int GetLength(SeqQueue Q) {
return (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
}
```
阅读全文