2.27数据结构

news2024/11/19 1:55:33

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.思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【八股文学习日记】集合概述

【八股文学习日记】集合概述 集合概述 Java 集合&#xff0c; 也叫作容器&#xff0c;主要是由两大接口派生而来&#xff1a;一个是 Collection接口&#xff0c;主要用于存放单一元素&#xff1b;另一个是 Map 接口&#xff0c;主要用于存放键值对。对于Collection 接口&#…

深入理解分库、分表、分库分表

前言 分库分表&#xff0c;是企业里面比较常见的针对高并发、数据量大的场景下的一种技术优化方案&#xff0c;所谓"分库分表"&#xff0c;根本就不是一件事儿&#xff0c;而是三件事儿&#xff0c;他们要解决的问题也都不一样&#xff0c;这三个事儿分别是"只…

kali安装ARL灯塔(docker)

1、root身份进入容器 ┌──(root㉿Kali)-[~/桌面] └─# su root ┌──(root㉿Kali)-[~/桌面] └─# docker 2、先更新再克隆 ┌──(root㉿Kali)-[~/桌面] └─# apt-get update …

【Android安全】Windows 环境下载 AOSP 源码

准备环境 安装 git 安装 Python 硬盘剩余容量最好大于 800G 打开 Git Bash&#xff0c;用 git 克隆源代码仓库 git clone https://android.googlesource.com/platform/manifest.git //没有梯子使用清华源 git clone https://aosp.tuna.tsinghua.edu.cn/platform/manifest.git这…

mac苹果电脑系统最好用的清理软件CleanMyMac2024功能介绍及如何激活解锁许可证

CleanMyMac X的界面设计简洁大气&#xff0c;为用户提供了直观且易于操作的使用体验。 布局清晰&#xff1a;界面布局非常明朗&#xff0c;左侧是功能栏&#xff0c;右侧则是信息界面。这种布局方式使得用户能够迅速找到所需的功能选项&#xff0c;提高了操作效率。色彩搭配&a…

Linux磁盘设备LVM介绍和常用场景说明

Linux常见的物理设备数据备份和负载均衡模式 1. LVM技术说明2. 相关概念3. 常用命令3.1 安装lvm命令3.2 创建分区3.3 格式化成LVM3.4 其他格式化 4. 常用场景4.1 创建LVM并挂载4.2 LVM扩容4.2.1 xfs扩容4.2.2 ext4扩容 4.2 缩减逻辑卷lv4.3 缩减vg&#xff1a;&#xff08;迁移…

LeetCode 刷题 [C++] 第54题.螺旋矩阵

题目描述 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 题目分析 根据题意可知&#xff0c;我们不需要记录已经走过的路径&#xff0c;只需要通过调整矩阵的上下左右边界即可完成任务&#xff1b;首先创建出矩阵…

Unity中URP下实现水体(水面反射)

文章目录 前言一、原理1、法一&#xff1a;使用立方体纹理 CubeMap&#xff0c;作为反射纹理使用2、法二&#xff1a;使用反射探针生成环境反射图&#xff0c;所谓反射的采样纹理 二、实现水面反射1、定义和申明CubeMap2、反射向量需要什么3、计算 N ⃗ \vec{N} N 4、计算 V ⃗…

10_Vue

文章目录 Vue快速入门Vue的指令Vue的插值表达式V指令v-bind&#xff08;单向绑定&#xff09;v-model&#xff08;双向绑定&#xff09;v-on&#xff08;事件监听&#xff09;v-for&#xff08;循环&#xff09;v-text、v-htmlv-show&#xff08;显示/隐藏&#xff09;v-if&…

解压缩软件哪个好用?附详细操作步骤~

在日常生活和工作中&#xff0c;我们经常需要处理各种压缩文件&#xff0c;如ZIP、RAR、嗨格式压缩大师等。而要解压这些文件&#xff0c;就需要借助专门的解压缩软件。然而&#xff0c;在众多的解压缩软件中&#xff0c;究竟哪个更好用呢&#xff1f;本文将带您一起探寻&#…

QT C++实战:实现用户登录页面及多个界面跳转

主要思路 一个登录界面&#xff0c;以管理员Or普通用户登录管理员&#xff1a;一个管理员的操作界面&#xff0c;可以把数据录入到数据库中。有返回登陆按钮&#xff0c;可以选择重新登陆&#xff08;管理员Or普通用户普通用户&#xff1a;一个主界面&#xff0c;负责展示视频…

成人年龄判断(个人学习笔记黑马学习)

结合前面学习的input输入语句&#xff0c;完成如下案例: 1.通过input语句&#xff0c;获取键盘输入&#xff0c;为变量age赋值。(注意转换成数字类型) 2.通过if判断是否是成年人&#xff0c;满足条件则输出提示信息&#xff0c;如下&#xff1a; 欢迎来到黑马儿童游乐场&#x…

模块整理!YOLOv9中的“Silence”、“RepNCSPELAN4”、“ADown”、“CBLinear”创新模块汇总!

代码链接&#xff1a;https://github.com/WongKinYiu/yolov9/tree/main 论文链接&#xff1a;YOLOv9: Learning What You Want to Learn Using Programmable Gradient Information 大量文字及图片来袭&#xff01; 本文整理了YOLOv9中的创新模块&#xff0c;附代码和结构图&a…

Golang使用Swag搭建api文档

1. 简介 Gin是Golang目前最为常用的Web框架之一。 公司项目验收需要API接口设计说明书&#xff08;Golang后端服务基于Gin框架编写&#xff09;&#xff0c;编写任务自然就落到了我们研发人员身上。 项目经理提供了文档模板&#xff0c;让我们参考模板来手动编写&#xff0c;要…

代码随想录算法刷题训练营day27:LeetCode(39)组合总和、LeetCode(40)组合总和 II、LeetCode(131)分割回文串

代码随想录算法刷题训练营day27&#xff1a;LeetCode(39)组合总和、LeetCode(40)组合总和 II、LeetCode(131)分割回文串 LeetCode(39)组合总和 题目 代码 import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List;clas…

每日五道java面试题之spring篇(九)

目录&#xff1a; 第一题. 说一下Spring的事务传播行为第二题. 说一下 spring 的事务隔离&#xff1f;第三题. Spring AOP and AspectJ AOP 有什么区别&#xff1f;AOP 有哪些实现方式&#xff1f;第四题. JDK动态代理和CGLIB动态代理的区别第五题. 解释一下Spring AOP里面的几…

代码随想录刷题训练营day25:LeetCode(216)组合总和III、LeetCode(17)电话号码的字母组合

代码随想录刷题训练营day25&#xff1a;LeetCode(40)组合总和 II、LeetCode(216)组合总和III、LeetCode(17)电话号码的字母组合 LeetCode(40)组合总和 II 题目 代码 import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util…

集合详解-迭代器遍历-增强for-List集合-List五种遍历方式-Set集合-排序规则Comparable-双列集合

Collection集合 数组和集合的区别 相同点 都是容器,可以存储多个数据 不同点 数组的长度是不可变的,集合的长度是可变的 数组可以存基本数据类型和引用数据类型 集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类 Collection 集合概述和使用 Collection…

毫米波雷达基本原理

毫米波 (mmWave) 是一类使用短波长电磁波的特殊雷达技术。雷达系统发射的电磁波信号被其发射路径上的物体阻挡继而会发生反射。通过捕捉反射的信号&#xff0c;雷达系统可以确定物体的距离、速度和角度。 毫米波雷达可发射波长为毫米量级的信号。在电磁频谱中&#xff0c;这种波…

配置MMDetection的solov2攻略整理

目录 一、MMDetection 特性 常见用法 二、ubuntu20.04配置solov2 三、Windows11配置solov2 一、MMDetection MMDetection是一个用于目标检测的开源框架&#xff0c;由OpenMMLab开发和维护。它提供了丰富的预训练模型和模块&#xff0c;可以用于各种目标检测任务&#xff…