#include<stdio.h>
#include<stdlib.h>
/* 队的最大长度 */
#define MAX_QUEUE_SIZE 100
/* 队列的数据类型 */
typedef int datatype;
/* 静态链的数据结构 */
typedef struct queue{
datatype sp_queue_array[MAX_QUEUE_SIZE];
/* 队头 */
int front;
/* 队尾 */
int rear;
}sp_queue;//要我我就直接queue*
sp_queue queue_init()//初始化
{
sp_queue q;
q.front = q.rear = 0;
return q;
}
int queue_empty(sp_queue q)
{
return q.front == q.rear;
}
int queue_en(sp_queue *q, datatype e)
{
/* 队满 */
if (q -> rear == MAX_QUEUE_SIZE)
return false;
/* 入队 */
q -> sp_queue_array[q -> rear] = e;
// printf("q.sp_queue_array[%d]=%d\n", q -> rear, e);插到了rear上
q -> rear += 1;
return true;
}
int queue_de(sp_queue *q, datatype *e)
{
/* 队空 */
if(queue_empty(*q))
return false;
/* 出队 */
q -> rear -= 1;//先剪一下,现在指的是对尾吧上的空格子
*e = q -> sp_queue_array[q -> rear];
return true;
}
void queue_clear(sp_queue *q)
{
q -> front = q -> rear = 0;
}
int get_front(sp_queue q, datatype *e)
{
/* 队空 */
if(q.front == q.rear)
return false;
/* 获取队头元素 */
*e = q.sp_queue_array[q.front];
return true;
}
int queue_len(sp_queue q)
{
return (q.rear - q.front);
}
void queue_traverse(sp_queue q, void (*visit)(sp_queue q))
{
visit(q);
}
void visit(sp_queue q)
{
/* 队空 */
if (q.front == q.rear)
printf("队列为空\n");
int temp = q.front;
while(temp != q.rear)
{
printf("%d ",q.sp_queue_array[temp]);
temp += 1;
}
printf("\n");
}
int main()
{
sp_queue q = queue_init();
queue_en(&q, 1);
queue_en(&q, 2);
printf("length=%d\n", queue_len(q));
queue_en(&q, 3);
printf("length=%d\n", queue_len(q));
queue_en(&q, 4);
printf("length=%d\n", queue_len(q));
queue_en(&q, 5);
printf("length=%d\n", queue_len(q));
queue_en(&q, 6);
printf("length=%d\n", queue_len(q));
queue_traverse(q,visit);
datatype *e = (datatype *)malloc(sizeof(*e));
queue_de(&q,e);
printf("queue_de(),e=%d length=%d\n", *e, queue_len(q));
queue_traverse(q, visit);
queue_clear(&q);
queue_traverse(q, visit);
printf("length:%d\n", queue_len(q));
}
找到一个更好的代码(用这个!!!)
typedef struct Queue
{
BiTNode *front;//队列头指针
BiTNode *tail;//队列尾指针
int size;//队列空间大小
}Queue;
//创建队列
int InitQueue(Queue &Q)
{
Q.front = (BiTNode*)malloc(INITQUEUE * sizeof(BiTNode));
if(!Q.front)
{
return 0;
}
Q.tail = Q.front;
Q.size = INITQUEUE;
return 1;
}
//判断队列是否为空
bool EmptyQueue(Queue Q)
{
if(Q.tail == Q.front)
{
return true;
}
else
{
return false;
}
}
//入队列
int EnQueue(Queue &Q,BiTNode e)
{
if((Q.tail - Q.front + INITQUEUE) % INITQUEUE == INITQUEUE - 1)
{
return 0;
}
*Q.tail = e;
Q.tail++;
return 1;
}
//出队列
int DeQueue(Queue &Q,BiTNode &e)
{
if(Q.front == Q.tail)
{
return 0;
}
e = *Q.front;
Q.front++;
return 1;
}