设为首页 加入收藏

TOP

C语言实现二叉树的常用的算法(递归与非递归实现遍历) (一)
2014-11-23 22:19:18 来源: 作者: 【 】 浏览:12
Tags:语言 实现 常用 算法

[cpp]
队列头文件:
#include

#include "BinaryTree.h"

//
// 队列头文件:Queue.h

#ifndef QUEUE_H
#define QUEUE_H

//
// 队列最大元素个数
#define MAX_QUEUE_SIZE 10

typedef BTree QueueElemType;

//
// 队列结构体
typedef struct tagQueue
{
BTree *base;
int front; // 头指针指示器,若队列不空,则指向队列中队头元素
int rear; // 尾指针指示吕,若队列不空,则指向队列队尾的下一个位置
}Queue;

//
// 构造一个空的队列
int InitializeQueue(Queue *pQueue);

//
// 判断队列是否为空
int IsQueueEmpty(Queue queue);

//
// 判断队列是否为满
int IsQueueFull(Queue queue);

//
// 入队
int EnQueue(Queue *pQueue, QueueElemType e);

//
// 退队
int DeQueue(Queue *pQueue, QueueElemType *e);
#endif

队列头文件:
#include

#include "BinaryTree.h"

//
// 队列头文件:Queue.h

#ifndef QUEUE_H
#define QUEUE_H

//
// 队列最大元素个数
#define MAX_QUEUE_SIZE 10

typedef BTree QueueElemType;

//
// 队列结构体
typedef struct tagQueue
{
BTree *base;
int front; // 头指针指示器,若队列不空,则指向队列中队头元素
int rear; // 尾指针指示吕,若队列不空,则指向队列队尾的下一个位置
}Queue;

//
// 构造一个空的队列
int InitializeQueue(Queue *pQueue);

//
// 判断队列是否为空
int IsQueueEmpty(Queue queue);

//
// 判断队列是否为满
int IsQueueFull(Queue queue);

//
// 入队
int EnQueue(Queue *pQueue, QueueElemType e);

//
// 退队
int DeQueue(Queue *pQueue, QueueElemType *e);
#endif[cpp] view plaincopyprint
队列实现文件:

#include
#include

#include "Queue.h"
#include "BinaryTree.h"

//
// 循环队列的实现文件:Queue.c

//
// 构造一个空的队列
int InitializeQueue(Queue *pQueue)
{
pQueue->base = (QueueElemType *)malloc(sizeof(QueueElemType) * MAX_QUEUE_SIZE);

// 申请空间失败,则退出程序
if (pQueue->base == NULL)
{
exit(OVERFLOW);
}

pQueue->front = pQueue->rear = 0;

return OK;
}

//
// 判断队列是否为空
// 返回0表示非空,返回非0,表示空
int IsQueueEmpty(Queue queue)
{
return !(queue.front - queue.rear);
}

//
// 判断队列是否为满
// 返回0表示示满,返回非0,表示已满
int IsQueueFull(Queue queue)
{
return (queue.rear + 1) % MAX_QUEUE_SIZE == queue.front ;
}

//
// 入队
int EnQueue(Queue *pQueue, QueueElemType e)
{
if (IsQueueFull(*pQueue))
{
printf("队列已经满,不能入队!\n");

return ERROR;
}
else
{
pQueue->base[pQueue->rear] = e;
pQueue->rear = (pQueue->rear + 1) % MAX_QUEUE_SIZE;

return OK;
}
}

//
// 退队
int DeQueue(Queue *pQueue, QueueElemType *e)
{
if (IsQueueEmpty(*pQueue))
{
printf("队列为空,不能执行退队操作\n");

return ERROR;
}
else
{
*e = pQueue->base[pQueue->front];
pQueue->front = (pQueue->front + 1) % MAX_QUEUE_SIZE;

return OK;
}
}

队列实现文件:

#include
#include

#include "Queue.h"
#include "BinaryTree.h"

//
// 循环队列的实现文件:Queue.c

//
// 构造一个空的队列
int InitializeQueue(Queue *pQueue)
{
pQueue->base = (QueueElemType *)malloc(sizeof(QueueElemType) * MAX_QUEUE_SIZE);

// 申请空间失败,则退出程序
if (pQueue->base == NULL)
{
exit(OVERFLOW);
}

pQueue->front = pQueue->rear = 0;

return OK;
}

//
// 判断队列是否为空
// 返回0表示非空,返回非0,表示空
int IsQueueEmpty(Queue queue)
{
return !(queue.front - queue.rear);
}

//
// 判断队列是否为满
// 返回0表示示满,返回非0,表示已满
int IsQueueFull(Queue queue)
{
return (queue.rear + 1) % MAX_QUEUE_SIZE == queue.front ;
}

//
// 入队
int EnQueue(Queue *pQueue, QueueElemType e)
{
if (IsQueueFull(*pQueue))
{
printf("队列已经满,不能入队!\n");

return ERROR;
}
else
{
pQueue->base[pQueue->rear] = e;
pQueue->rear = (pQueue->rear + 1) % MAX_QUEUE_SIZE;

return OK;
}
}

//
// 退队
int DeQueue(

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 1/10/10
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言中malloc函数返回值是否需要.. 下一篇C语言中异常处理的两个函数

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: