C语言数据结构之实现顺序存储结构队列

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a1135004584/article/details/79460662

队列:类似现实生活中的队列,队列所具有的特点是先进先出。

图示:

队列元素 1 2

1 2    

入列 3

1 2 3  

出列 1

  2 3  

出列 2

    3  


c语言实现:



实现代码:

queue.h

#ifndef _QUEUE_H_
#define _QUEUE_H_

#include <glob.h>
#include <stdbool.h>
#define QUQUE_LENGTH 100

typedef int elementType;

typedef enum{
    ERROR,SUCCESS
}Status;

typedef struct{
    int queueLength; //队列长度
    int front;//队列头
    int rear;//队列尾
    elementType queueArray[QUQUE_LENGTH];
}Queue;

void initQueue(Queue *queue);
void destroyQueue(Queue *queue);
void clearQueue(Queue *queue);
bool queueIsEmpty(Queue *queue);
int queueLength(Queue *queue);
Status getHead(Queue *queue,int *head);
Status enQueue(Queue *queue,const elementType *element);//进入队列
Status deQueue(Queue *queue,elementType *element);//出队列
void queueTraverse(Queue *queue,void(*pfun)(const elementType *e));



#endif


queue.c

#include <malloc.h>
#include <stdbool.h>
#include "queue.h"

void initQueue(Queue *queue)
{
    queue->queueLength = 0;
    queue->front=queue->rear = 0;
}

/**
 * 销毁队列
 * @param queue
 */
void destroyQueue(Queue *queue)
{
    queue->queueLength = 0;
    queue->front=queue->rear;
}
/**
 * 清空队列
 */
void clearQueue(Queue *queue)
{
    queue->queueLength = 0;
    queue->front=queue->rear = 0;
}
bool queueIsEmpty(Queue *queue)
{
    if(queue->front == queue->rear)
        return true;
    else
        return false;
}
int queueLength(Queue *queue)
{
    return queue->queueLength;
}
Status getHead(Queue *queue,int *head)
{
    if(queue){
        *head = queue->front;
        return SUCCESS;
    }else{
        return ERROR;
    }
}
Status enQueue(Queue *queue, const elementType *element)//进入队列
{
    if(queue && queue->rear < QUQUE_LENGTH){
        queue->queueArray[queue->rear++] = *element;
        queue->queueLength++;
        return SUCCESS;
    }else
        return ERROR;
}
Status deQueue(Queue *queue,elementType *element)//出队列
{
    if(queue && queue->front < queue->rear)
    {
        *element = queue->queueArray[queue->front++];
        queue->queueLength--;
        return SUCCESS;
    } else
        return ERROR;
}
void queueTraverse(Queue *queue,void(*pfun)(const elementType *e))
{
    if(queue->front < queue->rear)
    {
        int i = queue->front;
        for(;i<queue->rear;i++)
            pfun(&queue->queueArray[i]);
    }

}

main.c

#include <stdio.h>
#include "queue.h"

void pfun(const int *ele)
;

int main() {
    Queue queue;
    initQueue(&queue);
    int i = 1;
    enQueue(&queue,&i);
    enQueue(&queue,&i);
    enQueue(&queue,&i);


    deQueue(&queue,&i);
    queueTraverse(&queue, pfun);


    return 0;
}

void pfun(const int *ele)
{
    printf("%d ",*ele);
}


猜你喜欢

转载自blog.csdn.net/a1135004584/article/details/79460662