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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring中的事务和事务的传播机制

事务是一组操作的集合&#xff0c;不可以被分割。事务会把所有的操作作为一个整体&#xff0c;这组操作要么全部成功&#xff0c;要么全部失败。 事务有三种操作&#xff1a; 开启事务&#xff1b;提交事务&#xff1b;回滚事务。 如果代码的执行逻辑是这样&#xff1a; 开…

[C++][C++11][四] -- [lambda表达式]

目录 1.为什么要有lambda表达式&#xff1f;2.lambda表达式3.lambda表达式语法4.函数对象与lambda表达式 1.为什么要有lambda表达式&#xff1f; 在C98中&#xff0c;如果想要对一个数据集合中的元素进行排序&#xff0c;可以使用std::sort方法 如果待排序元素为自定义类型&am…

车牌识别-只用opencv的方式

项目简述 本文描述如何只使用opencv将车牌中的车牌号提取出来&#xff0c;整个过程大致分为三个过程&#xff1a;车牌定位&#xff0c;车牌号元素分割&#xff0c;模式匹配。 在做完这个实验后&#xff0c;我感触是&#xff0c;只用opencv的方式能使用的场景有限&#xff0c;不…

大模型(LLM)的token学习记录-I

文章目录 基本概念什么是token?如何理解token的长度&#xff1f;使用openai tokenizer 观察token的相关信息open ai的模型 token的特点token如何映射到数值&#xff1f;token级操作&#xff1a;精确地操作文本token 设计的局限性 tokenizationtoken 数量对LLM 的影响训练模型参…

【MySQL】DCL

DCL英文全称是Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 1. 管理用户 在MySQL数据库中&#xff0c;DCL&#xff08;数据控制语言&#xff09;是用来管理用户和权限的语句集合。通过DCL语句&#xff0c;可以创建、修改、删…

C# 打包nuget包

类库等项目开发好之后打开csproj&#xff0c;添加如下代码 <PropertyGroup><!--<TargetFramework>netstandard2.0</TargetFramework>--><PackageId>Test01</PackageId><Version>1.0.0</Version><Authors>wjl</Autho…

安防视频监控EasyCVR平台使用GB28181协议接入时,如何正确配置端口?

国标GB28181协议EasyCVR安防视频监控平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流…

05-Linux部署MySQL

Linux部署MySQL 在今后的使用过程中&#xff0c;需要频繁使用Linux系统&#xff0c;所以在Linux上安装软是必不可少的操作 。 前置要求 需要学习前四章知识&#xff0c;初识Linux、Linux基础命令、Linux权限管理、Linux高阶技巧这4个章节。需要开启多态虚拟机&#xff0c;电…

10 Redis之SB整合Redis

7. SB整合Redis Spring Boot 中可以直接使用 Jedis 实现对 Redis 的操作&#xff0c;但一般不这样用&#xff0c;而是使用 Redis操作模板 RedisTemplate 类的实例来操作 Redis。 RedisTemplate 类是一个对 Redis 进行操作的模板类。该模板类中具有很多方法&#xff0c;这些方…

多微信管理利器,让你高效社交,轻松管理!

随着工作和生活中微信号增加&#xff0c;管理多个微信账号也成了一项挑战。面对多个微信号&#xff0c;要应对各种消息、好友请求、群发等多重任务&#xff0c;往往会让我们不知所措。 这时&#xff0c;一款强大的微信管理系统将成为你的利器&#xff0c;帮你高效社交&#xf…

Redis的高性能之道

前言&#xff1a;做码农这么多年&#xff0c;我也读过很多开源软件或者框架的源码&#xff0c;在我看来&#xff0c;Redis是我看过写得最优美、最像一件艺术品的软件&#xff0c;正如Redis之父自己说的那样&#xff0c;他宁愿以一个糟糕的艺术家身份而不是一名好程序员被别人记…

【C++STL】快速排序算法(sort)的原理与使用

一、sort算法原理 std::sort 是 C 标准库中提供的排序算法&#xff0c;它使用的是一种经典的排序算法——快速排序&#xff08;Quicksort&#xff09;或者是其变种。 快速排序是一种基于比较的排序算法&#xff0c;通过不断地选择一个基准值&#xff08;pivot&#xff09;&am…