队列实现(C语言)

北慕城南 提交于 2020-03-12 02:41:17

队列是数据结构中比较常见的,跟时间有关的一般和队列有关系。

队列的实现有很多如数队(数组实现)、链队(链表实现的)。数队又分不同的实现,每种实现都有自己的缺点。这里是最普通的一种,了解队列的结构。下面是数队的一种实现,先看实现:

#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;结果显示:

注意:此结构因为是队头位置一直保持不变,所以不需要构件队头指针,只需要队尾指针。缺点就是在出队的时候要一个一个往前移动,效率很低。后面还有一个结构是构件对头指针。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!