当前位置:编程学习 > C/C++ >>

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语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,