队列是数据结构中比较常见的,跟时间有关的一般和队列有关系。
队列的实现有很多如数队(数组实现)、链队(链表实现的)。数队又分不同的实现,每种实现都有自己的缺点。这里是最普通的一种,了解队列的结构。下面是数队的一种实现,先看实现:
#include<stdio.h>
#include<malloc.h>
//结构
typedef struct QU{
int *base;//1
int rear;//2
int size;//3
} QU, *QUECE;
QUECE init(){
QUECE queue;
queue->base = (int *)malloc(10*sizeof(int));
queue->rear = 0;
queue->size = 10;
return queue;
}
void en(QUECE queue, int e){
if(queue->rear-1 == queue->size)//4
exit(-1);
queue->base[queue->rear] = e;//5
queue->rear = queue->rear+1;//6
}
int de(QUECE queue){
int e;
int i;
e = queue->base[0];//7
if(queue->rear == 0)//8
exit(-1);
for(i=1;i<queue->rear;i++){//9
queue->base[i-1] = queue->base[i];
}
queue->rear--;
return e;
}
int main(void){
QUECE queue;
queue = init();
int i;
for(i=0;i<11;i++){
en(queue, i);
}
for(i=0;i<11;i++){
printf("%d\n", de(queue));
}
return 0;
}
1---数队的基止;
2--- 数队的尾指针,因为数组可以通过下标访问元素,所以是整型下标就可以。
3---分配的空间大小。入队时先判断是否满。
4---判断数队是否满。
5---在队尾插入数据,赋值。
6---队尾指针后移一位。
7---保存删除的队头元素,作为返回对象。
8---判断数队是否为空,为空退出。
9--- 数队删除队头后,一个一个往前移动。(缺点)
主程序;main()是先入队1-10,在出队1-10;结果显示:
注意:此结构因为是队头位置一直保持不变,所以不需要构件队头指针,只需要队尾指针。缺点就是在出队的时候要一个一个往前移动,效率很低。后面还有一个结构是构件对头指针。
来源:oschina
链接:https://my.oschina.net/u/2248826/blog/690299