二叉树部分操作

/*
	输入n个数据给队列
	对队列遍历 依次出队输出
	
	运行示意: 
Please input the number you want:3
Please input in turn:
1
2
3
Queue's length:3
1 2 3
Queue's head:1
1 2 3
Queue's length:0

*/

#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)		//对数据 data 入队操作 queue 
{
        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;								//队列长度+1 
}
//出队 
int QueuePop(struct Queue* queue, int* data)	//对queue出队操作 返回值给 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;
}
//销毁队列 
void QueueDestroy(struct Queue* queue)
{
     struct Node* tmp;
     while(queue->front)
     {
         tmp = queue->front;
         queue->front = queue->front->next;
         free(tmp);
     }
}
//Get the length得到队列长度 
int QueueLen(struct Queue* queue)
{
	return(queue->size);
}
//TraversalQueue遍历队列元素 
void QueueTraverse(struct Queue* queue)
{
	if (QueueEmpty(queue))
        {printf("It is empty.");}
    else{
		struct Node* tmp=queue->front;
    	while(tmp)
    	{	int data=tmp->data;
    		printf("%d ",data);
    		tmp=tmp->next;
		}
	}
}
//Get Queue's head 返回队列头元素 
int QueueHead(struct Queue* queue)
{
	if (QueueEmpty(queue))
        {
                return 0;
        }
    else{
		struct Node* tmp=queue->front;
		return(tmp->data);
	}
}

int main(void)
{
        struct Queue queue;		//创建队列 queue 
        QueueInit(&queue);		//初始化 
        printf("Please input the number you want:");
        int n;scanf("%d",&n);		//输入n个数据到队列 
        printf("Please input in turn:\n");
        for (int i=0; i<n; i++)
        {	int m;scanf("%d",&m);
                QueuePush(&queue, m);
        }
        printf("Queue's length:%d\n",QueueLen(&queue));
        QueueTraverse(&queue);printf("\n");
        printf("Queue's head:%d\n",QueueHead(&queue));
        while (!QueueEmpty(&queue))		//出队每个元素并输出 
        {	int e;
                QueuePop(&queue, &e);
                printf("%d ", e);
        }
 		printf("\nQueue's length:%d",QueueLen(&queue));
        printf("\n");
 
        return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值