c语言队列的作用,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);

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值