队列的基本操作

这篇博客介绍了如何使用C语言实现队列的基本操作,包括队列的初始化、入队、出队、获取队头元素、获取队列长度和遍历。通过定义队列节点和队首队尾指针,实现了队列的动态管理。代码中还包含了一个简单的主函数示例,展示了如何使用这些操作。
摘要由CSDN通过智能技术生成

队列的基本操作包括队列的初始化,遍历,入队,出队,得到队头元素,获取队列的长度等等

首先定义队列的节点

// 队列的节点
struct Node
{
        int data;
        struct Node* next;
};

定义队首,队尾指针

// 队首队尾指针
struct Queue
{
        struct Node* front;
        struct Node* rear;
        int size;
};

完整代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
// 队列的节点
struct Node
{
        int data;
        struct Node* next;
};
// 队首队尾指针
struct Queue
{
        struct Node* front;
        struct Node* rear;
        int size;
};

void QueueInit(struct Queue* queue)//队列的初始化
{
        queue->front = NULL;
        queue->rear = NULL;
        queue->size = 0;
}

int QueueEmpty(struct Queue* queue)//队列为空
{
        return (queue->size == 0);
}

void QueuePush(struct Queue* queue, const int data)//入队
{
        struct Node* node;
        node = (struct Node*)malloc(sizeof(struct Node));
        assert(node != NULL);

        node->data = data;
        node->next = NULL;

        if(QueueEmpty(queue))
        {
            queue->front = node;
            queue->rear = node;
        }
        else
        {
            queue->rear->next = node;
            queue->rear = node;
        }
        ++queue->size;
}

int QueuePop(struct Queue* queue, int* data)//删除队头元素
{
        if (QueueEmpty(queue))
        {
                return 0;
        }
        struct Node* tmp = queue->front;
        *data = queue->front->data;
        queue->front = queue->front->next;
        free(tmp);
        --queue->size;

        return 1;
}

int GetHead(struct Queue* queue)//得到对头元素
{
    if( queue->front!= queue->rear)
        return queue->front->data;
}

void QueueLength(struct Queue* queue)//得到队列的长度
{

	int len = 0;
	Node *p = queue->front->next;
	while (p)
	{

		len++;
		p = p->next;//获取队列的长度
	}
}



void QueueTraverse(struct Queue* queue)//遍历队列
{
	Node* p=queue->front->next;
	while(p)
    {
        printf("%d",p->next);
        p=p->next;
    }
    printf("%n");
}



void QueueDestroy(struct Queue* queue)//销毁队列
{
     struct Node* tmp;
     while(queue->front)
     {
         tmp = queue->front;
         queue->front = queue->front->next;
         free(tmp);
     }
}

int main( )
{
        struct Queue queue;
        QueueInit(&queue);
        int i,n;
        scanf("%d",&n);
        for (i=0; i<n; i++)
        {
                QueuePush(&queue, i);
        }
        while (!QueueEmpty(&queue))
        {
                QueuePop(&queue, &i);
                printf("%d ", i);
        }

        printf("\n");

        return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值