二叉树和栈的基本操作

Tree.h:

#pragma once#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#define TreeDataType char/**二叉树数据结构定义**/
typedef struct BiTreeNode {TreeDataType data;struct BiTreeNode *left;struct BiTreeNode *right;
} BiTreeNode, *BiTree;/**二叉树的建立--按照先序方式建立--插入**/
void CreateBiTree(BiTree *T);/**先序遍历  根左右**/
void PreOrderTravel(BiTree T);/**中序遍历 左根右**/
void InOrderTravel(BiTree T);/**后序遍历 左右根**/
void TailOrderTravel(BiTree T);

Tree.c:

#include "Tree.h"
#define MAXSIZE 100
/**二叉树的建立--按照先序方式建立--插入**/
void CreateBiTree(BiTree *T) {char val;scanf("%c", &val);if (val == '#')*T = NULL; //null表示为空枝else {*T = (BiTree)malloc(sizeof(BiTreeNode));(*T)->data = val;CreateBiTree(&(*T)->left);CreateBiTree(&(*T)->right);}
}/**先序遍历  根左右**/
void PreOrderTravel(BiTree T) {if (T == NULL)return;printf("%c ", T->data);PreOrderTravel(T->left);PreOrderTravel(T->right);
}/**中序遍历 左根右**/
void InOrderTravel(BiTree T) {if (T == NULL)return;InOrderTravel(T->left);printf("%c ", T->data);InOrderTravel(T->right);
}/**后序遍历 左右根**/
void TailOrderTravel(BiTree T) {if (T == NULL)return;TailOrderTravel(T->left);TailOrderTravel(T->right);printf("%c ", T->data);
}

Stack.h:

#pragma once#include <stdio.h>
#include <stdlib.h>
#include <assert.h>#define MAX_SIZE 100
typedef int StackDataType;
typedef struct Stack {StackDataType array[MAX_SIZE];int pop;} Stack;void StackInit(Stack* pStack); //初始化void StackDestroy(Stack* pStack); //销毁void StackPush(Stack* pStack, StackDataType data); //入栈void StackPop(Stack* pStack); //出栈StackDataType StackTop(Stack* pStack); //查看栈顶元素int StackSize(const Stack* pStack); //栈长度int StackFull(const Stack* pStack); //栈满int StackEmpty(const Stack* pStack); //栈空

Stack.c:

#include "Stack.h"void StackInit(Stack* pStack) //初始化
{pStack->pop = 0;
}void StackDestroy(Stack* pStack) //销毁
{pStack->pop = 0;
}void StackPush(Stack* pStack, StackDataType data) //入栈
{assert(pStack != NULL);pStack->array[pStack->pop] = data;pStack->pop++;
}void StackPop(Stack* pStack) //出栈
{assert(pStack != NULL);pStack->pop--;
}StackDataType StackTop(Stack* pStack) //查看在栈顶元素
{assert(pStack != NULL);return pStack->array[pStack->pop - 1];
}int StackSize(const Stack* pStack) //栈长度
{return pStack->pop;
}int StackFull(const Stack* pStack) //栈满
{if (pStack->pop >= MAX_SIZE) {return 1;}else{return 0;}
}int StackEmpty(const Stack* pStack) //栈空
{if (pStack->pop == 0){return 1;}else{return 0;}
}

main.c:

#include <Windows.h>
#include "Stack.h" //栈
#include "Tree.h"  //树//栈基本操作
void stackvoid() {Stack pStack;StackInit(&pStack); //初始化//StackDestroy(pStack);//销毁StackPush(&pStack, 1); //入栈StackDataType a = StackTop(&pStack);printf("把1入栈,当前栈顶元素:%d\n ", a);StackPush(&pStack, 3);a = StackTop(&pStack);printf("把3入栈,当前栈顶元素:%d \n", a);StackPush(&pStack, 5);a = StackTop(&pStack);printf("把5入栈,当前栈顶元素%d\n", a);StackPop(&pStack); //出栈a = StackTop(&pStack);printf("出栈,当前栈顶元素%d\n ", a);int b = StackSize(&pStack);  //栈长度int c = StackFull(&pStack);  //栈满int d = StackEmpty(&pStack); //栈空printf("栈长度:%d\n", b);printf("栈满否(1为满,0为未满):%d\n", c);printf("栈空否(1为空,0为未空):%d\n", d);
}void ErChaShu()
{printf("测试代码\n");BiTree T;T = (BiTree)malloc(sizeof(BiTreeNode));printf("请给二叉树按照先序方式依次输入结点的值(空结点为#):\n");CreateBiTree(&T);printf("先序方式遍历结果:\n");PreOrderTravel(T);printf("\n");printf("中序方式遍历结果:\n");InOrderTravel(T);printf("\n");printf("后序方式遍历结果:\n");TailOrderTravel(T);printf("\n");
}int main() {//stackvoid();ErChaShu();system("pause");return 0;
}

二叉树和栈的基本操作相关推荐

  1. 数据结构源码笔记(C语言):栈的基本操作

    #include <stdio.h> #define MaxSize 100typedef char ElemType;typedef struct {char stack[MaxSize ...

  2. 二叉树的构造以及基本操作

    *二叉树的构造以及基本操作: 二叉树的构造基本思想:循环遍历一段字符串,遇到"(" 就将父结点入指针栈(数组指针),并将变量k置为1,表示接下来构建的是左子树,遇到",& ...

  3. 栈:栈的基本操作总结

    栈的基本操作总结 一.什么是栈 二.栈的应用场景 三.对栈的一些具体操作 四.代码实现 一.什么是栈 栈的英文为(stack) 栈是一个先入后出(FILO-First In Last Out)的有序列 ...

  4. sdut 3335 数据结构实验之栈与队列八:栈的基本操作

    数据结构实验之栈与队列八:栈的基本操作 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Descri ...

  5. c++:栈的基本操作+实例:迷宫求解

    栈的基本操作+实例:迷宫求解 #include<iostream> using namespace std;struct Node {int datai;int dataj;Node* n ...

  6. python 链栈及基本操作

    链栈,即用链表实现栈存储结构 链栈的实现思路同顺序栈类似,顺序栈是将顺序表(数组)的一端作为栈低,另一端为栈顶:链栈也如此,通常我们将链表的头部作为栈顶,尾部作为栈低,如图1所示: 将链表头部作为栈顶 ...

  7. 十七、二叉树的建立与基本操作

    十七.二叉树的建立与基本操作 文章目录 十七.二叉树的建立与基本操作 题目描述 解题思路 上机代码 一点建议 题目描述 编写程序实现二叉树的如下操作: 建立二叉链表 二叉树的先序.中序.后序遍历 求二 ...

  8. step3 . day7数据结构之二叉顺序数的创建和二叉树的栈形式遍历

    1.最近从网易云课堂学习了一个老师的数据结构相关的知识,了解到数据结构的应用和二分查找之间的关系,就自己想着写一个创建二叉顺序数和利用栈对二叉顺序树进行顺序输出的代码,终于一个周末的时间写完了. 2. ...

  9. 数据结构-“栈”的基本操作

    栈作为一种数据结构,是一种只能在一端进行插入和删除操作的特殊线性表.它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出 ...

最新文章

  1. PAT (Basic Level) Practise (中文)-1025. 反转链表 (25)
  2. 阿里员工吐槽:我在阿里工作五年,面试一个小公司竟然挂了
  3. x10i升级android4.0,升级Android 2.1改变归纳_索尼爱立信 X10i_手机Android频道-中关村在线...
  4. Python由于目标计算机积极拒绝,无法连接。错误解决
  5. html网页制作每周食谱,新增食谱.html
  6. win10开始菜单添加磁贴_厌倦了默认的Win10开始菜单外观?这是自定义的方法
  7. Tricks(二十三)—— Python 实现树这种数据结构
  8. a better git log
  9. ros中odometry数据生成方式与分发去向
  10. 社交APP市场泥沙俱下,怎能脱颖而出
  11. SSD固态硬盘重装win10系统 无法分区,gpt格式
  12. How far away ? HDU - 2586 trajan算法lca
  13. 《雨夜》 RocketMQ源码系列(一) NameServer 核心源码解析
  14. DolphinDB Database丨交易回测系列一:技术信号回测
  15. keras读取h5文件load_weights、load代码操作
  16. mfc与win32区别
  17. 图形推理1000题pdf_行测80分秒杀技——图形推理满分√
  18. python樱花树代码_python3实现用turtle模块画一棵随机樱花树
  19. MFC ---- CString
  20. 如何为360浏览器设置http代理服务器

热门文章

  1. Struts2漏洞和Struts Scan工具实战
  2. matplotlib.pyplot---------Python强大的绘图功能软件
  3. CentOS 7 yum方式快速安装MongoDB
  4. 继承的基本概念(1)
  5. Java 调用Dll
  6. [转]深入理解G1垃圾收集器
  7. ClickOnce部署(3):使用证书
  8. frame页面地址转向跨域解决方法
  9. 洛谷 - P4173 残缺的字符串(多项式匹配字符串-NTT)
  10. POJ - 1026 Cipher(置换群的幂)