C语言队列

C语言的队列(queue),是指先进先出(FIFO, First-In-First-Out)的线性表。在具体应用中通常用链表或者数组来实现。队列只允许在后端(称为rear)进行插入操作,在前端(称为front)进行删除操作

单链表形式(单链队列使用链表作为基本数据结果,因此不存在伪溢出的问题,队列长度也没有限制。但插入和读取的时间代价会比较高)

#include 
#include
#include 
#include
#include 

#define Queue_TYPE int
typedef struct queue_node
{
    Queue_TYPE value;
    struct queue_node *next;
}QUEUE_NODE;
typedef struct queue
{
    QUEUE_NODE *font;
    QUEUE_NODE *rear;
}QUEUE;
int is_full(QUEUE *q);
int is_empty(QUEUE *q);
void enqueue(QUEUE *q,Queue_TYPE value);
void dequeue(QUEUE *q);
QUEUE * creat_queue();
void print(QUEUE *q);
void destroy_queue(QUEUE *q);
int main(int argc, const char * argv[]) {
    QUEUE *q = creat_queue();
    if (q==NULL) {
        printf("malloc failed");
    }
//    creat_queue(q);
    enqueue(q,10); enqueue(q,9); enqueue(q,8); enqueue(q,7); enqueue(q,6); enqueue(q,5);
    enqueue(q,4);  enqueue(q,3); enqueue(q,2); enqueue(q,1); enqueue(q,0);
    printf("enqueue压入数值后:\n");
    print(q);
    destroy_queue(q);
    return 0;
}
QUEUE * creat_queue()
{
    QUEUE *q = (QUEUE *)malloc(sizeof(QUEUE));
    if (q==NULL) {
        printf("malloc failed");
    }
    q->font = (QUEUE_NODE *)malloc(sizeof(QUEUE_NODE));
    if (q->font == NULL) {
        printf("malloc failed");
    }
    
    q->rear = q->font;
    return q;
}

void enqueue(QUEUE *q,Queue_TYPE value)
{
    QUEUE_NODE *newNode = (QUEUE_NODE *)malloc(sizeof(QUEUE_NODE));
    if (newNode == NULL) {
        printf("malloc failed");
    }
    
    newNode->next = NULL;
    newNode->value = value;
    q->rear->next = newNode;
    q->rear = newNode;
}
int is_empty(QUEUE *q)
{
    return q->rear == q->font;
}
void print(QUEUE *q)
{
    if (is_empty(q)) {
        printf("empty");
    }
    QUEUE_NODE *node = q->font->next;
    while (node != NULL) {
        printf("%d",node->value);
        node = node->next;
    }
    printf("\n");
}
void dequeue(QUEUE *q)
{
    if (is_empty(q)) {
        printf("empty");
    }
    QUEUE_NODE *font = q->font;
    q->font = q->font->next;
    free(font);
}
void destroy_queue(QUEUE *q)
{
    while (!is_empty(q)) {
        dequeue(q);
    }
}

你可能感兴趣的:(C语言队列)