#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_OP 10
typedef struct vector {
int* data;
int size;
}vector;
vector* initVector(int n) {//初始化顺序表
vector* v = (vector *)malloc(sizeof(vector));
v->size = n;
v->data = (int *)malloc(sizeof(int) * n);
return v;
}
void clearVector(vector *v) {
if (v == NULL)return;
free(v->data);
free(v);
return;
}
int vectorSeek(vector* v, int pos) {//顺序表查看当前顺序表头数据
if (pos < 0 || pos >= v->size)return -1;//判断当前position是否合法
return v->data[pos];//返回当前数据
}
int insertVector(vector *v,int pos,int val) {
if (pos < 0 || pos >= v->size)return -1;
v->data[pos] = val;
return 1;
}
typedef struct Queue{//顺序表定义
vector * data;
int size, head, tail, count;
}Queue;
Queue* initQueue(int n) {//初始化队列
Queue* q = (Queue*)malloc(sizeof(Queue));
q->data = initVector(n);//初始化数据区
q->size = n;
q->head = q->tail = q->count = 0;//数据区的head,tail,count都等于0
return q;
}
int push(Queue* q, int val) {
if (q->count == q->size)return 0;
insertVector(q->data, q->tail, val);
q->tail += 1;
if (q->tail == q->size)q->tail = 0;
q->count += 1;
return 1;
}
int empty(Queue* q) {//判空操作
return q->count == 0;//表达式成立为空,不成立不为空
}
int pop(Queue* q) {
if (empty(q))return 0;
q->head += 1;
q->count -= 1;
return 1;
}
int front(Queue* q) {//查看队列表头元素
return vectorSeek(q->data, q->head);
}
void outputQueue(Queue* q) {
printf("Queue:");
for (int i = 0; i < q->count; i++) {
printf("%4d", vectorSeek(q->data, (q->head + i) % q->size));
}
printf("\n\n");
return;
}
void clearQueue(Queue* q) {
if (q == NULL)return;
clearVector(q->data);// 清空队列的数据区
free(q);
return;
}
int main() {
srand(time(0));
Queue* q = initQueue(5);
for (int i= 0; i < MAX_OP; i++) {
int op = rand() % 5;
int val = rand() % 100;
switch (op) {
case 0:
printf("front of queue:%d\n", front(q));
pop(q);
break;
case 1:
case 2:
case 3:
case 4:
printf("push %d to queue\n", val);
push(q,val);
break;
}
outputQueue(q);
}
clearQueue(q);
return 0;
}
队列的顺序表实现
最新推荐文章于 2024-10-08 16:10:58 发布