C语言实现二叉树的常用的算法(递归与非递归实现遍历)
[cpp]
队列头文件:
#include <stdio.h>
#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 <stdio.h>
#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 <stdio.h>
#include <stdlib.h>
#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 <stdio.h>
#include <stdlib.h>
#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;
}
}
[cpp]
栈头文件:
#ifndef STACK_H
#define STACK_H
#include <stdio.h>
#include "BinaryTree.h"
//
// 栈的头文件声明部分:Stack.h&
补充:软件开发 , C语言 ,