您的位置:首页 > 汽车 > 时评 > 网页模板免费下载完整版_百度收录提交接口_深圳百度推广代理_建立一个网站需要多少钱?

网页模板免费下载完整版_百度收录提交接口_深圳百度推广代理_建立一个网站需要多少钱?

2024/12/23 19:03:02 来源:https://blog.csdn.net/longspython/article/details/144592515  浏览:    关键词:网页模板免费下载完整版_百度收录提交接口_深圳百度推广代理_建立一个网站需要多少钱?
网页模板免费下载完整版_百度收录提交接口_深圳百度推广代理_建立一个网站需要多少钱?

一、思维导图

+

二、二叉树序列练习题

        2.1. 根据给出的二叉树序列,画出该二叉树的图,并给出后序序列。

                前序遍历的顺序是: CABGHEDF

                中序遍历的顺序是: GHBACDEF

        2.2. 已知如下:

                中序遍历:HDMIBJNEAFKCG

                后序遍历:HMIDNJEBKFGCA

                画出二叉树并写出前序遍历。

三、代码

        3.1. 链式队列

        【linkQueue.h】

#ifndef __LINKQUEUE_H__
#define __LINKQUEUE_H__#include <stdio.h>
#include <stdlib.h>typedef char DataType;
//定义节点类型
typedef struct Node
{union{int len; //头节点数据域DataType data; //普通节点数据域};struct Node *next; //指针域
}Node, *NodePtr;//定义队列类型
typedef struct
{NodePtr head; //指向头节点的指针NodePtr tail; //指向位节点的指针
}linkQueue, *linkQueuePtr;//创建链式队列
linkQueuePtr create();//判空
int empty(linkQueuePtr L);//入队
int push(linkQueuePtr L, DataType e);//遍历
void show(linkQueuePtr L);//出队
int pop(linkQueuePtr L);//求大小
int size(linkQueuePtr L);//销毁
void my_free(linkQueuePtr L);#endif

        【linkQueue.c】

#include "linkQueue.h"//创建链式队列
linkQueuePtr create()
{linkQueuePtr L = (linkQueuePtr)malloc(sizeof(linkQueue));if(NULL == L){printf("队列创建失败!\n");return NULL;}//L->head = (NodePtr)malloc(sizeof(Node));if(NULL == L->head){printf("链表创建失败!\n");free(L);L=NULL;return NULL;}//链表头节点初始化L->head->len = 0; //链表长度为0L->head->next = NULL; //指针域置空//将尾指针也指向头节点L->tail = L->head;printf("链式队列创建成功!\n");return L;
}//判空:1空,0非空
int empty(linkQueuePtr L)
{if(NULL == L || L->head == NULL){printf("所给队列不合法!\n");return -1;}//返回队头和队尾是否相等return L->head == L->tail ? 1:0;
}//入队
int push(linkQueuePtr L, DataType e)
{	if(NULL == L || L->head == NULL){printf("所给队列不合法!\n");return -1;}//申请节点封装数据NodePtr p = (NodePtr)malloc(sizeof(Node));if(NULL == p){printf("入队失败!\n");return -2;}p->data = e; //将数据封装进节点中p->next = NULL; //指针域置空,防止野指针//插入逻辑L->tail->next = p; //将新节点连到链表上L->tail = p; //更新尾指针,指向最后一个节点//表长变化L->head->len++;printf("入队成功!\n");return 0;
}//遍历
void show(linkQueuePtr L)
{if(NULL == L || L->head == NULL || empty(L)){printf("遍历失败!\n");}//遍历逻辑printf("从队头到队尾元素为:");NodePtr q = L->head->next; //定义遍历指针从第一个节点出发while(q != NULL){//说明q指向的是正常节点,输出其数据域printf("%c ", q->data);q = q->next;}printf("\n");
}//出队
int pop(linkQueuePtr L)
{if(NULL == L || L->head==NULL || empty(L)){printf("遍历失败!\n");return -1;}//出队逻辑NodePtr p = L->head->next; //标记第一个节点L->head->next = p->next; //孤立要删除的节点printf("%c出队成功!\n", p->data);free(p); //释放节点p=NULL;//表长变化L->head->len--;//判断是否已全部删除if(L->head->next == NULL){L->tail = L->head; //将尾指针重新指向头节点}return 0;
}//求大小
int size(linkQueuePtr L)
{return L->head->len;
}//销毁
void my_free(linkQueuePtr L)
{//判断逻辑if(NULL == L){return ;}//没有链表if(NULL == L->head){free(L); //释放队列的空间L = NULL;}//既有队列,又有节点while(!empty(L)){pop(L); //将所有节点出队}//释放头节点free(L->head);//释放队列的空间free(L);L=NULL;printf("队列销毁成功!\n");
}

        【main.c】

#include "linkQueue.h"int main()
{linkQueuePtr L = create();if(NULL == L){return -1;}//调用入队函数push(L, 'A');	push(L, 'B');	push(L, 'C');	push(L, 'D');	//遍历show(L);//出队pop(L);show(L);pop(L);show(L);//求大小size(L);//销毁my_free(L);return 0;
}

        3.2. 二叉树

        【bitree.h】

#ifndef __BITREE_H__
#define __BITREE_H__#include <stdio.h>
#include <stdlib.h>typedef char DataType;typedef struct Node
{DataType data;struct Node *L;struct Node *R;
}Node, *NodePtr;//二叉树创建
NodePtr create();//先序遍历
void pri_order(NodePtr T);//中序遍历
void in_order(NodePtr T);//后序遍历
void post_order(NodePtr T);#endif

        【bitree.c】

#include "bitree.h"//二叉树创建
NodePtr create()
{char value = 0;scanf("%c", &value);getchar();//判断输入数据if(value == '#'){return NULL;}//申请节点封装数据NodePtr T = (NodePtr)malloc(sizeof(Node));if(NULL == T){printf("节点申请失败!\n");return NULL;}//将数据放入数据域中T->data = value;//递归创建左子树T->L = create();//递归创建右子树T->R = create();return T;
}//先序遍历
void pri_order(NodePtr T)
{//判断逻辑if(NULL == T){return; //递归出口}//输出节点数据域printf("%c ", T->data);//先序遍历左子树pri_order(T->L);//先序遍历右子树pri_order(T->R);
}//中序遍历
void in_order(NodePtr T)
{//判断逻辑if(NULL == T){return; //递归出口}//中序遍历左子树in_order(T->L);//输出节点数据域printf("%c ", T->data);//中序遍历右子树in_order(T->R);
}//后序遍历
void post_order(NodePtr T)
{//判断逻辑if(NULL == T){return; //递归出口}//后序遍历左子树post_order(T->L);//后序遍历右子树post_order(T->R);//输出节点数据域printf("%c ", T->data);
}

        【main.c】

#include "bitree.h"int main()
{NodePtr T= create();if(NULL == T){return -1;}printf("二叉树创建成功!\n");printf("先序序列为:");pri_order(T);printf("\n");printf("中序序列为:");in_order(T);printf("\n");printf("后序序列为:");post_order(T);printf("\n");return 0;
}

        【执行结果】

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com