顺序优先队列的编程实现
时间: 2023-10-19 07:16:56 浏览: 34
顺序优先队列可以使用数组来实现。具体实现如下:
1. 定义一个数组和一个计数器,用于保存队列中的元素和元素的个数。
```
#define MAXSIZE 100 // 队列的最大容量
int queue[MAXSIZE]; // 队列数组
int count = 0; // 队列中元素的个数
```
2. 实现插入操作。插入操作需要将新元素插入到队列中的合适位置,以保证队列的有序性。
```
void insert(int value) {
if (count == MAXSIZE) {
printf("Queue is full\n");
return;
}
int i;
for (i = count - 1; i >= 0; i--) {
if (value > queue[i]) {
queue[i + 1] = queue[i];
} else {
break;
}
}
queue[i + 1] = value;
count++;
}
```
3. 实现删除操作。删除操作只需要将队列中的第一个元素出队即可。
```
void delete() {
if (count == 0) {
printf("Queue is empty\n");
return;
}
for (int i = 0; i < count - 1; i++) {
queue[i] = queue[i + 1];
}
count--;
}
```
4. 实现查看队列中第一个元素的操作。
```
int peek() {
if (count == 0) {
printf("Queue is empty\n");
return -1;
}
return queue[0];
}
```
5. 实现遍历队列中所有元素的操作。
```
void traverse() {
if (count == 0) {
printf("Queue is empty\n");
return;
}
for (int i = 0; i < count; i++) {
printf("%d ", queue[i]);
}
printf("\n");
}
```
完整代码如下:
```
#include <stdio.h>
#define MAXSIZE 100 // 队列的最大容量
int queue[MAXSIZE]; // 队列数组
int count = 0; // 队列中元素的个数
void insert(int value) {
if (count == MAXSIZE) {
printf("Queue is full\n");
return;
}
int i;
for (i = count - 1; i >= 0; i--) {
if (value > queue[i]) {
queue[i + 1] = queue[i];
} else {
break;
}
}
queue[i + 1] = value;
count++;
}
void delete() {
if (count == 0) {
printf("Queue is empty\n");
return;
}
for (int i = 0; i < count - 1; i++) {
queue[i] = queue[i + 1];
}
count--;
}
int peek() {
if (count == 0) {
printf("Queue is empty\n");
return -1;
}
return queue[0];
}
void traverse() {
if (count == 0) {
printf("Queue is empty\n");
return;
}
for (int i = 0; i < count; i++) {
printf("%d ", queue[i]);
}
printf("\n");
}
int main() {
insert(3);
insert(5);
insert(1);
insert(2);
insert(4);
traverse();
printf("Peek: %d\n", peek());
delete();
traverse();
printf("Peek: %d\n", peek());
return 0;
}
```