《数据结构与算法分析——c语言描述》读后笔记 8

二叉树

表达式树的树叶是操作数(operand),比如常数或变量,而其他的节点为操作符(operator)。这里限定操作符只能为+,-,*,/四个操作符。

把后缀表达式转变成表达式树:

程序:

//expression_tree.h

struct TreeNode;
typedef struct TreeNode *PtrToNode;
typedef PtrToNode Tree;
typedef char Type;

PtrToNode CreateNode(char ch);

struct TreeNode
{
    Type Element;
    Tree Left;
    Tree Right;
};

//expression_tree.c

#include "expression_tree.h"
#include<stdlib.h>
#include<stdio.h>

PtrToNode CreateNode(char ch)
{
    PtrToNode p=malloc(sizeof(struct TreeNode));
    if(p==NULL)
    {
	printf("The node is NULL !\n");
	return p;
    }

    p->Element=ch;
    return p; 
}

//stack.h

#include "expression_tree.h"
typedef Tree ElementType;
#ifndef _Stack_h

struct Node;
typedef struct Node *Stack;

int IsEmpty(Stack S);
int IsFull(Stack S);
Stack CreateStack( int MaxElements );
void DisposeStack(Stack S);
void MakeEmpty(Stack S);
void Push( ElementType X, Stack S);
ElementType Top( Stack S);
void Pop(Stack S);
ElementType TopAndPop( Stack S );

#define EmptyTOS (-1)
#define MinStackSize (5)

struct Node
{
    int Capacity;
    int TopOfStack;
    ElementType *Array;
};

#endif

//stack.c

#include "stack.h"
#include<stdio.h>
#include<error.h>
#include<stdlib.h>

int IsEmpty(Stack S)
{
    return S->TopOfStack==EmptyTOS;
}

int IsFull(Stack S)
{
    return S->TopOfStack==(S->Capacity-1);
}

Stack CreateStack( int MaxElements )
{
    Stack S;
    if(MaxElements<MinStackSize)
	error(1,1,"Stack size is too small");
    S=malloc(sizeof(struct Node));
    if(S==NULL)
	error(1,1,"Out of space!!!");
    S->Array=malloc(sizeof(ElementType)*MaxElements);
    if(S->Array==NULL)
	error(1,1,"Out of space!!!");
    S->Capacity=MaxElements;
    MakeEmpty(S);
    return S;
}

void DisposeStack(Stack S)
{
    if(S!=NULL)
    {
 	free(S->Array);
	free(S);
    }
}

void MakeEmpty(Stack S)
{
    S->TopOfStack=EmptyTOS;
}

void Push(ElementType X,Stack S)
{
    if(IsFull(S))
	error(1,1,"Full stack");
    else
    {
        S->TopOfStack++;
        S->Array[S->TopOfStack]=X;
    }
}

ElementType Top( Stack S)
{
    if(!IsEmpty(S))
	return S->Array[S->TopOfStack];
    error(1,1,"Empty stack 3");
    return 0;
}

void Pop( Stack S)
{
    if(IsEmpty(S))
	error(1,1,"Empty stack 2");
    else
        S->TopOfStack--;
}

ElementType TopAndPop( Stack S)
{
    if(!IsEmpty(S))
    {
	return S->Array[ S->TopOfStack--];
    }
    error(1,1,"Empty stack 1");
    return 0;
}

//MainProgram.c

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include"stack.h"

Tree CreateTree(char* str)
{
    Tree T,p,q;
    int len=strlen(str);
    Stack S=CreateStack(len);

    int i;
    for(i=0;i<len;++i)
    {
	switch(str[i])
 	{
	    case ‘+‘:
	    case ‘-‘:
	    case ‘*‘:
	    case ‘/‘:
	    {
		T=CreateNode(str[i]);
	 	p=TopAndPop(S);
		q=TopAndPop(S);
		T->Left=q;
		T->Right=p;
		Push(T,S);
		break;
	    }
	    default:
	    {
		T=CreateNode(str[i]);
		Push(T,S);
		break;
	    }
	}
    }
    return Top(S);
}

void outtree(Tree t)
{
    if(t!=NULL)
    {
        outtree(t->Left);
        outtree(t->Right);
        printf("%c",t->Element);
    }
}

int main()
{
    char* ss="ab+cde+**";
    Tree TT=CreateTree(ss);
    outtree(TT);
    printf("\n");
    return 0;
}

利用后缀表达式构造一个表达式树,然后以后序遍历策略输出该树:

时间: 2024-10-29 02:17:44

《数据结构与算法分析——c语言描述》读后笔记 8的相关文章

《数据结构与算法分析—C语言描述》pdf

下载地址:网盘下载 内容简介 编辑 <数据结构与算法分析:C语言描述(原书第2版)>内容简介:书中详细介绍了当前流行的论题和新的变化,讨论了算法设计技巧,并在研究算法的性能.效率以及对运行时间分析的基础上考查了一些高级数据结构,从历史的角度和近年的进展对数据结构的活跃领域进行了简要的概括.由于<数据结构与算法分析:C语言描述(原书第2版)>选材新颖,方法实用,题例丰富,取舍得当.<数据结构与算法分析:C语言描述(原书第2版)>的目的是培养学生良好的程序设计技巧和熟练的算

数据结构与算法分析 c语言描述 pdf 高清下载

网盘下载:数据结构与算法分析 c语言描述 pdf 高清下载 – 易分享电子书PDF资源网 作者: [美] Mark Allen Weiss 出版社: 机械工业出版社 副标题: C语言描述 原作名: Data Structures and Algorithm Analysis in C:Second Edition 译者: 冯舜玺 出版年: 2004-1-1 页数: 391 定价: 35.00元 装帧: 平装 内容简介 · · · · · · 本书是<Data Structures and Alg

数据结构与算法分析_Java语言描述(第2版)pdf

下载地址:网盘下载 本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计). 随着计算机速度的不断增加和功能的日益强大,人们对有效编程和算法分析的要求也不断增长.本书将算法分析与最有效率的Java程序的开发有机地结合起来,深入分析每种算法,并细致讲解精心构造程序的方法,内容全面.缜密严格. 第3版的主要更新如下: ? 第4章包含AVL树删除算法的实现. ? 第5章进行了全面修订和扩充,现在包含两种较

《数据结构与算法分析Java语言描述》PDF文件免费下载

图书简介: 本书是国外数据结构与算法分析方面的经典教材,使用卓越的Java编程语言作为实现工具讨论了数据结构(组织大量数据的方法)和算法分析(对算法运行时间的估计). 随着计算机速度的不断增加和功能的日益强大,人们对有效编程和算法分析的要求也不断增长.本书把算法分析与最有效率的Java程序的开发有机地结合起来,深入分析每种算法,内容全面.缜密严格,并细致讲解精心构造程序的方法. 图书目录部分截图: 结语:总结 数据结构与算法分析需要这份PDF文档的朋友,欢迎加Q群:219571750,免费领取,

《数据结构与算法分析——c语言描述》读后笔记 5

将中缀表达式转换成后缀表达式并输出,然后计算出后缀表达式的值. 程序: #include<stdio.h> #include<string.h> #include<stdlib.h> #include"stack.h" char* infix_to_postfix(char* str) {     int i,j=0;     int SIZE=strlen(str);     if(str==NULL)     { printf("emp

《数据结构与算法分析——c语言描述》读后笔记 6

队列: #ifndef _Queue_h struct QueueRecord; typedef struct QueueRecord *Queue; int Empty(Queue Q); int IsFull(Queue Q); Queue CreateQueue(int MaxElements); void DisposeQueue(Queue Q); void MakeEmpty(Queue Q); void Enqueue(ElementType X, Queue Q); Elemen

《数据结构与算法分析——c语言描述》读后笔记 3

栈: 栈的应用,平衡符号: 读入一个字符串表达式,其中包括有( .).[ .] .{ .}这6个符号.写一个程序检验字符串表达式中这6个符号是否正确匹配. 程序: //stack.h typedef char ElementType; #ifndef _Stack_h struct Node; typedef struct Node *Stack; int IsEmpty(Stack S); int IsFull(Stack S); Stack CreateStack( int MaxEleme

《数据结构与算法分析——c语言描述》读后笔记

数据是稳定的(即不允许插入操作和删除操作) 在任意时刻,算法都能对它已经读入的数据给出子序列问题的答案,具有这种特性的算法叫做联机算法(online algorithm) 分治(divide-and-conquer)策略:其想法是把问题分成两个大致相等的子问题,然后递归地对他们求解,这是"分"部分."治"阶段将两个子问题的解合并到一起并可能再做些少量的附加工作,最后得到整个问题的解. 当编写递归例程的时候,关键是要牢记递归地四条基本法则: 基准情形. 某些基准情形,

《数据结构与算法分析——c语言描述》读后笔记 4

栈: 中缀到后缀的转换.我们只允许操作+,*,(,). 中缀表达式:a+b*c+(d*e+f)*g,后缀表达式:abc*+de*f+g*+ 程序如下,stack.h如上篇博文中所示: #include<stdio.h> #include<string.h> #include<stdlib.h> #include"stack.h" char* infix_to_postfix(char* str) {     int i,j=0;     int SI

《数据结构与算法分析——c语言描述》读后笔记 2

"memory access violation" 或"segmentation violation"这种信息通常意味着有指针变量包含了伪地址.一个通常的原因是初始化变量失败. free(P)的结果是:P正在指向的地址没变,但在该地址处的数据此时已无定义了. 偶尔会出现当你的程序使用大量空间时,系统可能不能满足你对新单元的要求.此时返回的是NULL指针. 警告:malloc(sizeof(PtrToNode))是合法的,但是它并不给结构体分配足够的空间.它只给指针分