二叉树和栈的基本操作
生活随笔
收集整理的這篇文章主要介紹了
二叉树和栈的基本操作
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
二叉樹(shù)和棧的基本操作
Tree.h:
#pragma once#define _CRT_SECURE_NO_WARNINGS#include <stdio.h> #include <stdlib.h> #include <assert.h> #define TreeDataType char/**二叉樹(shù)數(shù)據(jù)結(jié)構(gòu)定義**/ typedef struct BiTreeNode {TreeDataType data;struct BiTreeNode *left;struct BiTreeNode *right; } BiTreeNode, *BiTree;/**二叉樹(shù)的建立--按照先序方式建立--插入**/ void CreateBiTree(BiTree *T);/**先序遍歷 根左右**/ void PreOrderTravel(BiTree T);/**中序遍歷 左根右**/ void InOrderTravel(BiTree T);/**后序遍歷 左右根**/ void TailOrderTravel(BiTree T);Tree.c:
#include "Tree.h" #define MAXSIZE 100 /**二叉樹(shù)的建立--按照先序方式建立--插入**/ 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); //銷(xiāo)毀void StackPush(Stack* pStack, StackDataType data); //入棧void StackPop(Stack* pStack); //出棧StackDataType StackTop(Stack* pStack); //查看棧頂元素int StackSize(const Stack* pStack); //棧長(zhǎng)度int StackFull(const Stack* pStack); //棧滿(mǎn)int StackEmpty(const Stack* pStack); //棧空Stack.c:
#include "Stack.h"void StackInit(Stack* pStack) //初始化 {pStack->pop = 0; }void StackDestroy(Stack* pStack) //銷(xiāo)毀 {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) //棧長(zhǎng)度 {return pStack->pop; }int StackFull(const Stack* pStack) //棧滿(mǎn) {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" //樹(shù)//棧基本操作 void stackvoid() {Stack pStack;StackInit(&pStack); //初始化//StackDestroy(pStack);//銷(xiāo)毀StackPush(&pStack, 1); //入棧StackDataType a = StackTop(&pStack);printf("把1入棧,當(dāng)前棧頂元素:%d\n ", a);StackPush(&pStack, 3);a = StackTop(&pStack);printf("把3入棧,當(dāng)前棧頂元素:%d \n", a);StackPush(&pStack, 5);a = StackTop(&pStack);printf("把5入棧,當(dāng)前棧頂元素%d\n", a);StackPop(&pStack); //出棧a = StackTop(&pStack);printf("出棧,當(dāng)前棧頂元素%d\n ", a);int b = StackSize(&pStack); //棧長(zhǎng)度int c = StackFull(&pStack); //棧滿(mǎn)int d = StackEmpty(&pStack); //棧空printf("棧長(zhǎng)度:%d\n", b);printf("棧滿(mǎn)否(1為滿(mǎn),0為未滿(mǎn)):%d\n", c);printf("棧空否(1為空,0為未空):%d\n", d); }void ErChaShu() {printf("測(cè)試代碼\n");BiTree T;T = (BiTree)malloc(sizeof(BiTreeNode));printf("請(qǐng)給二叉樹(shù)按照先序方式依次輸入結(jié)點(diǎn)的值(空結(jié)點(diǎn)為#):\n");CreateBiTree(&T);printf("先序方式遍歷結(jié)果:\n");PreOrderTravel(T);printf("\n");printf("中序方式遍歷結(jié)果:\n");InOrderTravel(T);printf("\n");printf("后序方式遍歷結(jié)果:\n");TailOrderTravel(T);printf("\n"); }int main() {//stackvoid();ErChaShu();system("pause");return 0; } 超強(qiáng)干貨來(lái)襲 云風(fēng)專(zhuān)訪(fǎng):近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的二叉树和栈的基本操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 动态内存管理:malloc和free以及
- 下一篇: 顺序表、链表、双向循环链表