当前位置: 首页 > news >正文

数据结构(5) 循环列表,哈希表

顺序队列会假溢出故移入循环队列循环队列与顺序队列思想相同都是顺序存储预先分配数组空间循环队列1. 空队列队头和队尾在同一位置为了与队空的判别条件进行区分数据存储时会故意留下一格不存数据2. 满队列队列少存储一个数据当队尾1跟上队头sysqueue.h#ifndef __SYSQUEUE_H__ #define __SYSQUEUE_H__ typedef int DataType_t; typedef struct sque { DataType_t *pbase; int head; int tail; } SQueue_t; #define MAX_QUEUE_LEN 10 extern SQueue_t *create_sysqueue(); extern int is_full_sysqueue(SQueue_t *psque); extern int is_empty_sysqueue(SQueue_t *psque); extern int push_sysqueue(SQueue_t *psque,DataType_t data); extern void show_sysqueue(SQueue_t *psque); extern int pop_sysqueue(SQueue_t *psque,DataType_t *pdata); extern void clear_sysqueue(SQueue_t *psque); extern void destiry_sysqueue(SQueue_t **ppsque); #endifsysqueue.c#include sysqueue.h #include stdio.h #include stdlib.h //创建循环队列 SQueue_t *create_sysqueue() { SQueue_t *psque malloc(sizeof(SQueue_t)); if(NULLpsque) { printf(malloc error\n); return NULL; } psque-pbasemalloc(sizeof(DataType_t)*MAX_QUEUE_LEN); if(NULLpsque-pbase) { printf(malloc error\n); return NULL; } psque-head0; psque-tail0; return psque; } //判满 int is_full_sysqueue(SQueue_t *psque) { if(((psque-tail1)%MAX_QUEUE_LEN)psque-head) { return 1; } return 0; } //判空 int is_empty_sysqueue(SQueue_t *psque) { if(psque-headpsque-tail) { return 1; } return 0; } //入队 int push_sysqueue(SQueue_t *psque,DataType_t data) { if(is_full_sysqueue(psque)) { return -1; } // *(psque-pbasepsque-tail)data; psque-pbase[psque-tail]data; // if(psque-tailMAX_QUEUE_LEN) // { // psque-tail0; // } // else // { // psque-tail; // } psque-tail((psque-tail1)%MAX_QUEUE_LEN); return 0; } //遍历 void show_sysqueue(SQueue_t *psque) { for(int ipsque-head;i!psque-tail;i(i1)%MAX_QUEUE_LEN) { printf(%d ,psque-pbase[i]); } printf(\n); } //出队 int pop_sysqueue(SQueue_t *psque,DataType_t *pdata) { if(is_empty_sysqueue(psque)) { return -1; } if(pdata!NULL) { *pdatapsque-pbase[psque-head]; } psque-head(psque-head1)%MAX_QUEUE_LEN; return 0; } //置空循环队列 void clear_sysqueue(SQueue_t *psque) { psque-headpsque-tail0; } //销毁 void destiry_sysqueue(SQueue_t **ppsque) { free((*ppsque)-pbase); free(*ppsque); *ppsqueNULL; }main.c#include sysqueue.h #include stdio.h int main(int argc, char **argv) { SQueue_t *psquecreate_sysqueue(); DataType_t data; if(NULLpsque) { return -1; } push_sysqueue(psque, 1); push_sysqueue(psque, 2); push_sysqueue(psque, 3); push_sysqueue(psque, 4); push_sysqueue(psque, 5); show_sysqueue(psque); int retpop_sysqueue(psque, data); if(!ret) { printf(pop_data %d\n,data); } push_sysqueue(psque, 6); show_sysqueue(psque); clear_sysqueue(psque); destiry_sysqueue(psque); return 0; }哈希表哈希存储散列存储将要存储数据的关键字和数据存储位置值之间建立起对应的函数关系当数据存储时根据该关系映射数据的存储位置查找数据时利用该函数关系运算出数据的存储位置。目的为了快速检索数据哈希冲突/哈希矛盾解决哈希冲突的方法:1. 开放定址法闭散列冲突后在表内另找空闲位置不额外开辟空间。线性探测往后逐个找空位缺点易产生聚集。二次探测按二次步长寻址缓解聚集。随机探测随机选下一个地址。2. 链地址法开散列 / 拉链法哈希表每个位置存链表冲突元素直接挂在对应链表尾部。优点实现简单、无聚集、删除方便。工程最常用Java HashMap、Redis 字典均使用。hash.h#ifndef __HASH_H__ #define __HASH_H__ typedef struct info { char name[32]; char tel[16]; }DataType_t; typedef struct node { DataType_t data; struct node *pnext; }HSnode_t; #define HASH_MAX_SIZE 27 extern int insert_hash_table(HSnode_t *hash_table[],DataType_t data); extern void show_hash_table(HSnode_t *hash_table[]); extern HSnode_t *find_hash_table(HSnode_t **hash_table,char *name); extern void destory_hash(HSnode_t **hash_table); #endifhash.c#include hash.h #include stdio.h #include stdlib.h #include string.h //哈希函数 int hash_function(char key) { if(keyakeyz) { return key-a; } else if(keyAkeyZ) { return key-A; } else { return HASH_MAX_SIZE-1; } } //创建哈希表 int insert_hash_table(HSnode_t *hash_table[],DataType_t data) { HSnode_t *pnodemalloc(sizeof(HSnode_t)); if(NULLpnode) { printf(malloc error\n); return -1; } pnode-datadata; pnode-pnextNULL; int addrhash_function(data.name[0]); pnode-pnexthash_table[addr]; hash_table[addr]pnode; return 0; } //遍历 void show_hash_table(HSnode_t *hash_table[]) { for(int i0;iHASH_MAX_SIZE;i) { HSnode_t *phash_table[i]; while(p!NULL) { printf(%s : %s\n,p-data.name,p-data.tel); pp-pnext; } printf(\n); } } //查找 //*hash_table[] 等价于 **hash_table HSnode_t *find_hash_table(HSnode_t **hash_table,char *name) { int addrhash_function(name[0]); HSnode_t *phash_table[addr]; while(p!NULL) { if(0strcmp(p-data.name,name)) { return p; } pp-pnext; } return NULL; } //销毁 void destory_hash(HSnode_t **hash_table) { for(int i0;iHASH_MAX_SIZE;i) { HSnode_t *phash_table[i]; while(p!NULL) { hash_table[i]p-pnext; free(p); phash_table[i]; } } }main.c#include hash.h #include stdio.h int main(int argc, char **argv) { HSnode_t *hash_table[HASH_MAX_SIZE]{NULL}; DataType_t pers[]{{zhangsan,110},{lisi,112}, {wanger,120},{zhaowu,119},{maliu,10086}}; insert_hash_table(hash_table,pers[0]); insert_hash_table(hash_table,pers[1]); insert_hash_table(hash_table,pers[2]); insert_hash_table(hash_table,pers[3]); insert_hash_table(hash_table,pers[4]); show_hash_table(hash_table); HSnode_t *pfind_hash_table(hash_table, maliu); printf(find:%s ,%s\n,p-data.name,p-data.tel); destory_hash(hash_table); return 0; }
http://www.rkmt.cn/news/1409134.html

相关文章:

  • OpenAI API 协议、 Chat Completions API、Responses API 协议 对比和联系,适用场景以及还有哪些其他协议详解
  • PS换脸肤色不统一?Nano Banana一键智能校色,彻底告别面具感
  • 别再折腾了!保姆级教程:在Ubuntu 22.04服务器上配置Jupyter Lab远程访问(含防火墙和后台运行)
  • 基于Java打造传统民俗解读平台智能趣味测评系统源码搭建
  • 别再折腾了!Windows 10/11 本地一键部署Nacos 2.0.3单机版(含MySQL配置避坑)
  • 智能卡尔曼滤波:用轻量级RNN动态优化信道估计噪声参数
  • 百考通AI:开题报告智能生成,轻松输出专业内容
  • 鸿蒙截屏/投屏/录屏状态检测:isCaptured 与 onCaptureStatusChange 实战
  • 【迭代升级,焕新出发】海纳数聚公文写作产品升级纪实
  • Mac 上怎么找到这个目录 /Users/你的用户名/Library/Application Support/JetBrains
  • 告别微信文件传输!用ES文件浏览器+Windows共享,5分钟搞定手机电脑大文件互传
  • 原来市面上这些余热锅炉直销厂家,究竟好在哪里?
  • 人工智能通识课:大模型
  • 贝叶斯统计中的“隐藏基石”:Beta分布与Gamma函数关系详解及PyMC3应用实例
  • 鲸采云AI智能预测:自动联动库存,一键生成精准采购
  • 2026年苏州活动策划公司效率大揭秘,究竟有多高?快来一探究竟!
  • 2026年AI搜索引流哪家强?选服务商需要避开这三个误区
  • 别再死记硬背MDP公式了!用Python手搓一个强化学习‘贪吃蛇’来理解马尔科夫决策过程
  • git发版上线的时候,打tag标签方便jenkins部署
  • Windows Terminal 1.18终极指南:五大生产力功能深度解析与实战应用
  • 小米大模型官宣大幅降价!MiMo V2.5顶级能力全面爆发,新用户注册直送10元API体验金,普通人也能玩转最强AI
  • 别急着用cor()!用Python和R做皮尔逊相关分析前,这5个坑你绕开了吗?
  • 饲料颗粒机工厂哪家可靠
  • 用Python和NumPy手把手实现一个马尔可夫链预测模型(附股市预测代码)
  • 【ChatGPT投资分析权威报告】:2024年全球AI大模型资本流向、估值陷阱与超额回报三大预警信号
  • ThreadPoolExecutor 源码深度解析:从变量设计到生产级避坑指南
  • 基于STM32H745实现惯性级闭环光纤陀螺:MCU替代FPGA的硬实时架构设计
  • 用Python和螺旋理论手把手教你计算UR5机械臂的末端位置(附完整代码)
  • 三相模块级联型固态变压器SST(级联H桥+ISOP-DAB双有源变换器)Matlab仿真+文献
  • 2026采购风向标:Nitronic 60(S21800)供应链突围指南与核心供应商深度解析 - 品牌2025