/*******************************************************
int 型返回 0或者其他int 型数据;
指针型返回相应类型的指针;
只有 void 型才用 return ;(返回空格);
*****************************/
#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
/***********************************************************
队的几个要素:
1.元素(用一个指针存放首地址,相当于数组名,但是其空间分配方面比数组灵活)
2.队的长度(用来分配空间)
3.队首(插入或输出元素时用)
4.队尾(插入或输出元素时用)
5.当前队的长度
***********/
/************************************************************
考虑到其先进先出原则,
若从front入队,就从rear出队!!!
若从rear入队,就从front出队!!!
*******************/
typedef struct seqqueue
{
Elemtype *data;
int max;
int front;
int rear;
int length;
}Queue;
Queue *crea(int max) //生成空队
{
Queue *q=(Queue *)malloc(sizeof(*q));
q->data=(Elemtype *)malloc(sizeof(Elemtype)*max);
q->max=max;
q->front=0; //队首
q->rear=0; //队尾
q->length=0; //队的长度
return q;
}
int isFull(Queue *q) //判断队是否满了
{
if(q->length==q->max) //若满了
{
return 1; //返回1
}
return 0; //否则返回0
}
/*********************************************************
生成队,若从front入队,就从rear出队!!!
若从rear入队,就从front出队!!!
******/
void enQueue(Queue *q,Elemtype data) //插入
{
if(isFull(q)) //若满了
{
return ; //直接跳出去
}
//这个if语句作用??? //有没有结果完全一样
if(q->length==0)
{
q->front=0;
q->rear=0;
}
q->length++;
q->data[q->front]=data; //从队头插入(顺序插入)
q->front++; //队头后移
}
int isEmpty(Queue *q) //判断队是否为空
{
// if(q) //错误,若不为空 输出 1
if(q==NULL) //若为空
{
return 1; //输出1
}
return 0; //否则输出 0
}
/******************************************************
出队,若从front入队,就从rear出队!!!
若从rear入队,就从front出队!!!
*******/
Elemtype deQueue(Queue *q)
{
if(isEmpty(q))
{
return 0;
}
Elemtype a=q->data[q->rear];
q->rear++;
q->length--;
/************
if(q->length==0)
{
q->front=0;
q->rear=0;
}
**************/
return a;
}
/************************************************
销毁队,释放空间
********/
void destory(Queue *q)
{
if(q)
{
if(q->data)
{
free(q->data);
}
free(q);
}
}
int main()
{
Queue *q=crea(10);
enQueue(q,5);
enQueue(q,6);
enQueue(q,7);
enQueue(q,8);
enQueue(q,9);
enQueue(q,10);
enQueue(q,11);
enQueue(q,12);
enQueue(q,71);
enQueue(q,81);
enQueue(q,91);
enQueue(q,101);
Elemtype a=deQueue(q);
printf("%d\n",a);
a=deQueue(q);
printf("%d\n",a);
a=deQueue(q);
printf("%d\n",a);
a=deQueue(q);
printf("%d\n",a);
a=deQueue(q);
printf("%d\n",a);
a=deQueue(q);
printf("%d\n",a);
a=deQueue(q);
printf("%d\n",a);
a=deQueue(q);
printf("%d\n",a);
a=deQueue(q);
printf("%d\n",a);
a=deQueue(q);
printf("%d\n",a);
a=deQueue(q);
printf("%d\n",a);
a=deQueue(q);
printf("%d\n",a);
a=deQueue(q);
printf("%d\n",a);
destory(q);
return 0;
}
/*
运行结果
5
6
7
8
9
10
11
12
71
81
0
135097
0
*/