2.27数据结构

1.链队

//link_que.c
#include "link_que.h"

//创建链队
Q_p create_que()
{
	Q_p q = (Q_p)malloc(sizeof(Q));
	if(q==NULL)
	{
		printf("空间申请失败\n");
		return NULL;
	}
	node_p L=(node_p)malloc(sizeof(node));
	if(L==NULL)
	{
		printf("申请空间失败\n");
		return NULL;
	}
	L->next=NULL;
	q->front = L;
	q->rear = L;
	return q;
}
//创建结点
node_p create_node()
{
	node_p new=(node_p)malloc(sizeof(node));
	if(new==NULL)
	{
		printf("申请空间失败\n");
		return NULL;
	}
	new->data=0;
	new->next=NULL;
	return new;
}
//判空
int empty_que(Q_p q)
{
	if(q==NULL)
	{
		printf("入参为空\n");
		return -1;
	}
	return q->front==NULL?1:0;
}
//入队
void push_que(Q_p q,datatype e)
{
	if(q==NULL)
	{
		printf("入参为空\n");
		return;
	}
	node_p s=create_node();
	s->data=e;
	q->rear->next=s;
	q->rear=s;
}
//出队
void pop_que(Q_p q)
{
	if(q==NULL)
	{
		printf("入参为空\n");
		return;
	}
	if(empty_que(q))
	{
		printf("队为空\n");
		return;
	}
	if(q->front->next==q->rear)
	{
		q->rear==q->front;
	}
	node_p p=q->front->next;
	printf("出队元素为:%d\n",p->data);
	q->front->next=p->next;
	free(p);
	p=NULL;	
}
//打印
void show(Q_p q)
{

	if(q==NULL)
	{
		printf("入参为空\n");
		return;
	}
	if(empty_que(q))
	{
		printf("队为空\n");
		return;
	}
	node_p p=q->front;
	while(p->next!=NULL)
	{
		p=p->next;
		printf("%d\n",p->data);
	}
}
//销毁
void free_que(Q_p *q)
{
	if(q==NULL||*q==NULL)
	{
		printf("入参为空\n");
		return;
	}
	free(*q);
	*q=NULL;
}
//link_que.h
#ifndef __LINK_QUE_H__
#define __LINK_QUE_H__
#include <stdio.h>
#include <stdlib.h>
typedef int datatype;
typedef struct node
{
	datatype data;
	struct node *next;
}node,*node_p;
typedef struct Q
{
	node_p front;
	node_p	rear;
}Q,*Q_p;

//创建链队
Q_p create_que();
//创建结点
node_p create_node();
//判空
int empty_que(Q_p q);
//入队push_que
void push_que(Q_p q,datatype e);
//出队pop_que
void pop_que(Q_p q);
//打印
void show(Q_p q);
//销毁
void free_que(Q_p *q);


#endif
//main.c
#include "link_que.h"

int main()
{
	Q_p q = create_que();
	push_que(q,90);
	push_que(q,12);
	push_que(q,6);
	show(q);
	putchar(10);
	pop_que(q);
	putchar(10);
	show(q);
	putchar(10);
	push_que(q,1);
	push_que(q,7);
	push_que(q,5);
	push_que(q,4);
	push_que(q,3);
	push_que(q,2);
	show(q);
	putchar(10);
	free_que(&q);
	show(q);
	return 0;
}

2.二叉树的遍历

//tree.c
#include "tree.h"
//创建结点
tree_p create_node(char data)
{
	tree_p new = (tree_p)malloc(sizeof(tree));
	if(new==NULL)
	{
		printf("空间申请失败\n");
		return NULL;
	}
	new->data=data;
	return new;	
}
//创建二叉树
tree_p create_tree()
{
	char data = '\0';
	scanf("%c",&data);
	getchar();
	if(data=='#')
		return NULL;
	tree_p T = create_node(data);
	T->lch=create_tree();
	T->rch=create_tree();
	return T;	
}
//先序遍历,根左右
void pri(tree_p T)
{
	if(T==NULL)
		return;
	printf("%c->",T->data);
	pri(T->lch);
	pri(T->rch);
}
//中序遍历,左根右
void mid(tree_p T)
{
	if(T==NULL)
		return;
	mid(T->lch);	
	printf("%c->",T->data);
	mid(T->rch);
}
//后序遍历,左右根
void last(tree_p T)
{
	if(T==NULL)
		return;
	last(T->lch);
	last(T->rch);	
	printf("%c->",T->data);
}


//tree.h
#ifndef __TREE_H__
#define __TREE_H__
#include <stdio.h>
#include <stdlib.h>

typedef struct tree_node
{
    char data;
    struct tree_node *lch;
    struct tree_node *rch;
}tree,*tree_p;

//创建结点
tree_p create_node(char data);
//创建二叉树
tree_p create_tree();

//先序遍历,根左右
void pri(tree_p T);
//中序遍历,左根右
void mid(tree_p T);
//后序遍历,左右根
void last(tree_p T);



#endif
//main.c
#include "tree.h"

int main()
{
	tree_p T=create_tree();
	printf("先序遍历\n");
	pri(T);
	putchar(10);
	printf("中序遍历\n");
	mid(T);
	putchar(10);	
	printf("后序遍历\n");
	last(T);
	putchar(10);
	return 0;
}

3.思维导图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/414542.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

一周学会Django5 Python Web开发-Django5列表视图ListView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计27条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

Java毕业设计-基于springboot开发的冬奥会科普平台系统-毕业论文+PPT(有源代码)

文章目录 前言一、毕设成果演示&#xff08;源代码在文末&#xff09;二、毕设摘要展示1.开发说明2.需求分析3、系统功能结构 三、系统实现展示1、登录注册2、系统功能模块3、管理员功能模块 四、毕设内容和源代码获取总结 Java毕业设计-基于springboot开发的冬奥会科普平台系统…

CrossOver2024软件虚拟机下载及使用方法教程步骤

CrossOver的使用方法相对简单&#xff0c;以下是详细的步骤&#xff1a; 下载与安装&#xff1a;首先&#xff0c;您需要从CrossOver的官方网站下载适合您操作系统&#xff08;Mac OS或Linux&#xff09;的软件版本。下载完成后&#xff0c;解压文件并按照提示进行安装。安装过…

强大的Docker入门知识

目录 一、Docker简介 1.1、Docker是 1.2、Docker通常会在以下情况下使用&#xff1a; 1.3、Docker和VMware区别 1.4、Docker 的优点 二、环境配置 2.1、代码操作 2.2、效果演示 2.3、配置镜像仓库 开始配置 三、基本命令 3.1、Docker基本命令 3.2、Docker镜像常用…

高并发数据采集:Ebay商家信息多进程爬虫的进阶实践

背景 Ebay作为全球最大的电子商务平台之一&#xff0c;其商家信息包含丰富的市场洞察。然而&#xff0c;要高效获取这些信息&#xff0c;就需要利用先进的技术手段。本文将深入探讨如何通过并发加速技术&#xff0c;实现Ebay商家信息多进程爬虫的最佳实践方法&#xff0c;并附…

分布式存储 ZBS 的 RoCE 技术支持与大数据应用场景性能评测

作者&#xff1a;深耕行业的 SmartX 金融团队 闫海涛 在《解决 SAN 交换机“卡脖子”并升级存储架构&#xff1f;一文解析 RoCE 与相关存储方案趋势》文章中&#xff0c;我们分析了如何利用支持 RoCE 技术的分布式存储&#xff0c;同步实现 IT 基础架构的信创转型与架构升级&a…

Linux中 LVM 逻辑盘卷管理

CSDN 成就一亿技术人&#xff01; 作者主页&#xff1a;点击&#xff01; Linux专栏&#xff1a;点击&#xff01; CSDN 成就一亿技术人&#xff01; 前言———— LVM 代表逻辑卷管理器&#xff0c;它是一种用于 Linux 和类 Unix 操作系统的磁盘管理和存储技术。LVM 允许用…

Linux终端中的VI/VIM编辑器详细说明

vi/vim —— 终端中的编辑器 目标 vi/vim 简介打开和新建文件三种工作模式常用命令分屏命令常用命令速查图 01. vi 简介 vi 或 vim 是一个强大的文本编辑器&#xff0c;它最初是由 vi 的作者布莱姆米勒开发的&#xff0c;后来由吉多范罗苏姆及其团队进行了扩展和维护&#…

opencascade c#例程解析

1.编译 将msvc.bat文件拖入vs2022的x64 native tools&#xff0c;即可 2.about.xaml <Windowxmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"x:Class"IE_WPF_WinForms…

Linux之定时任务02

一、什么是crond Linux 中 crond 就是定时任务&#xff0c;即根据 crond 指定的时间&#xff0c;由系统按指定的时间&#xff0c;周期性&#xff0c;自动触发的事件。 crond 服务在默认的情况下会每分钟检查系统中是否有定时任务&#xff0c;如果有且符合触发条件&#xff0c;…

docker 容器修改端口和目录映射

一、容器修改端口映射 一般在运行容器时&#xff0c;我们都会通过参数 -p&#xff08;使用大写的-P参数则会随机选择宿主机的一个端口进行映射&#xff09;来指定宿主机和容器端口的映射&#xff0c;例如 docker run -it -d --name [container-name] -p 8088:80 [image-name]…

Vue3之属性传值的四种情况

文章目录 Vue3之属性传值的四种情况一、引言二、父组件向子组件传值三、子组件向父组件传值四、祖先组件向后代组件传值五、兄弟组件之间传值 Vue3之属性传值的四种情况 一、引言 在vue3中&#xff0c;组件与组件之间是可以传递属性的&#xff0c;包括三种类型&#xff1a; …

Java Stream流指南:优雅处理集合数据

文章目录 一、为什么要使用stream流呢&#xff1f;二、如何获取Stream流&#xff1f;三、Stream流的中间方法四、Stream流的终结方法总结 一、为什么要使用stream流呢&#xff1f; 想必我们在日常编程中&#xff0c;会经常进行数据的处理&#xff0c;我们先来看看没有stram流时…

从零开始学习Netty - 学习笔记 -Netty入门-ChannelFuture

5.2.2.Channel Channel 的基本概念 在 Netty 中&#xff0c;Channel 是表示网络传输的开放连接的抽象。它提供了对不同种类网络传输的统一视图&#xff0c;比如 TCP 和 UDP。 Channel 的生命周期 Channel 的生命周期包括创建、激活、连接、读取、写入和关闭等阶段。Netty 中…

CGI程序与ShellShock漏洞

CGI是什么&#xff1f; CGI&#xff08;通用网关接口&#xff0c;Common Gateway Interface&#xff09;程序是一种用于在Web服务器上执行动态内容的技术。与服务器上普通的后端代码相比&#xff0c;CGI程序有几个区别&#xff1a; 执行环境&#xff1a; CGI程序在服务器上作为…

js中Symbol的理解与应用

文章目录 一、Symbol特性1.1 不支持语法new Symbol()1.2 唯一性1.3 不与其他值隐式转换1.4 不可枚举1.5 类型为symbol 二、Symbol常见方法2.1 Symbol.toStringTag2.2 Symbol.iterator2.3 Symbol.for() 三、Symbol应用 在JavaScript中&#xff0c;Symbol 是一种基本数据类型&…

el-table 多选表格存在分页,编辑再次操作勾选会丢失原来选中的数据

el-table表格多选时&#xff0c;只需要添加type"selection"&#xff0c; row-key及selection-change&#xff0c;如果存在分页时需要加上reserve-selection&#xff0c;这里就不写具体的实现方法了&#xff0c;可以查看我之前的文章&#xff0c;这篇文章主要说一下存…

智能指针(C++)

目录 一、智能指针是什么 二、为什么需要智能指针 三、智能指针的使用和原理 3.1、RALL 3.2 智能指针的原理 3.3、智能指针的分类 3.3.1、auto_ptr 3.3.2、unique_ptr 3.3.3、shared_ptr 3.2.4、weak_ptr 一、智能指针是什么 在c中&#xff0c;动态内存的管理式通过一…

VPX基于全国产飞腾FT-2000+/64核+复旦微FPGA的计算刀片

6U VPX计算板 产品简介 产品特点 飞腾计算平台&#xff0c;国产化率100% VPX-MPU6902是一款基于飞腾FT-2000/64核的计算刀片&#xff0c;主频2.2GHz&#xff0c;负责业务数据流的管控和调度。搭配自带独立显示芯片的飞腾X100芯片&#xff0c;可用于于各类终端及服务器类应用场…

Spring与SpringBoot入门

Spring入门 要使用Spring最起码需要引入两个依赖: <!-- Spring Core&#xff08;核心&#xff09; --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.3.20</version>…