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

数据结构-栈、队列、哈希表

1栈

1.栈的概念
1.1栈:在表尾插入和删除操作受限的线性表
1.2栈逻辑结构: 线性结构(一对一)
1.3栈的存储结构:顺序存储(顺序栈)、链表存储(链栈)
1.4栈的特点:
先进后出(fisrt in last out FILO表),后进先出

//创建栈   
Stacklist create_stack()
{Stacklist list=(Stacklist)malloc(sizeof(stack_t));if(NULL==list)return NULL ;memset(list->data,0,sizeof(list->data));list->top=-1;return list;
}//入栈                                                                                  int push(datatype element,Stacklist list)
{//1判断栈满//2判断栈创建失败if(list==NULL||list->top==MAXSIZE-1){return FALSE;}//3入栈,先加后压list->data[++list->top]=element;return SUCCESS;
}
//输出
int output(Stacklist list)
{//1判空//2判断创建失败if(list==NULL||list->top==-1){return FALSE;}//3打印for(int i=0;i<list->top;i++){printf("%.2f\n",list->data[i]);}putchar(10);return SUCCESS;
}
//出栈
int pop(Stacklist list)
{//1判空//2判断创建失败if(list==NULL||list->top==-1){return FALSE;}printf("pop data is %.2f\n",list->data[list->top--]);return SUCCESS;
}

2队列

1.队列的概念
1.队列: 在表尾插入,表头删除的操作受限的线性表
2.逻辑结构:线性结构(一对一)
3.存储结构:顺序存储(顺序队列(假溢出)(循环队列)),链式存储(链式队列)
4.队列的特点:先进先出(fisrt in first out FIFO表),后进后出

Queue create_queue()
{       Queue list=(Queue)malloc(sizeof(queuelist_t));if(NULL==list)return NULL;//初始化memset(list->data,0,sizeof(list->data));//队头队尾初始化list->front=list->rear=0;return list;
}//队列的插入
int enqueue(datatype element,Queue list)
{//判断队列是否创建//判断队列是否满if(NULL==list||list->rear==MAXSIZE)return FALSE;//3.插入在队尾部list->data[list->rear]=element;list->rear=(list->rear+1)%MAXSIZE;return SUCCESS;}
//队列的输出
int output(Queue list)
{//判断队列是否为空//判断队列是否创建if(NULL==list||list->front==list->rear)return FALSE;//3.循环打印对头--》队为的元素for(int i=list->front;i<list->rear;i=(i+1)%MAXSIZE){printf("%d",list->data[i]);}putchar(10);return SUCCESS;
} //队列的删除
int delqueue(Queue list)
{//判断队列是否为空//判断队列是否创建if(NULL==list||list->front==list->rear)return FALSE;//3.删除在对头printf("delqueue data is %d n",list->data[list->front]);list->front=(list->front+list->rear)%MAXSIZE;return SUCCESS;
}
//计算队列长度
int get_len(Queue list)
{
return (MAXSIZE-list->front+list->rear)%MAXSIZE;
}

3哈希表

1.哈希表的概念
散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

除留余数法:
取关键字被某个不大于哈希表表长m的数p除后所得余数为哈希地址的方法
H(key)=key MOD p (p<=m)
m: 元素的个数除以3/4
p一般取不大于表长m的最大质数

3.哈希冲突
1.哈希冲突:不同的关键码值通过哈希函数映射在同一片内存
2.线性探测法: di=1,2,3,...,m-1,即从冲突地址向后依次查找空闲地址的处理冲突方法
3.二次探测法: di=1²,-1²,2²,-2²。。.(km/2) 即从冲突地址向前后以整数二次方为增量查找空闲地址的处理中冲突方法
4.伪随机探测法:di为确定的伪随机数序列(如3,5,8...,即将冲突地址加上序列中的伪随机数以查找空地址的处理冲突方法
5.再哈希法:在发生冲突时使用另一个哈希函数计算地址,直到不再发生冲突
6.链地址法:将所有哈希函数值相同的记录存储在同一线性链表中
7.建立公共溢出区:一旦发生冲突,都填入溢出表

//
//
Hashlist create_node()                                                                               
{       //1创建一个新节点Hashlist s=(Hashlist)malloc(sizeof(struct Node));                                            if(NULL==s)return NULL;//初始化新节点的数据域s->data=0;/初始化新节点的指针域                                                                        s->next=NULL:return s;                                                                                    
}     
//计算最大质数  
int max_prime(int m)                                                                                 
{for(int i=m;i>=2;i--){int flag=0;                                                                          for(int j=2;j<=sqrt(i);j++)                                                          {                                                                                    if(i%j==0){flag=1;break;}}if(flag==0)return i;}
}
//插入
void insert_hash(int key,Hashlist hash[],int m)
{int p=max_prime(m);int sub=key%p;Hashlist head=hash[sub];//headHashlist s=create_node():s->data=key;//1.判断链表为空if(head==NULL)head=s;//2.存在多个节点s->next=head;head=s;hash[ sub]=head;
}

http://www.lryc.cn/news/539208.html

相关文章:

  • 安装海康威视相机SDK后,catkin_make其他项目时,出现“libusb_set_option”错误的解决方法
  • 【鸿蒙】ArkUI-X跨平台问题集锦
  • 大模型驱动的业务自动化
  • ocr智能票据识别系统|自动化票据识别集成方案
  • [数据结构]红黑树,详细图解插入
  • 【机器学习】超参数调优指南:交叉验证,网格搜索,混淆矩阵——基于鸢尾花与数字识别案例的深度解析
  • Burp Suite基本使用(web安全)
  • React实现自定义图表(线状+柱状)
  • 从低清到4K的魔法:FlashVideo突破高分辨率视频生成计算瓶颈(港大港中文字节)
  • Qt的QTabWidget的使用
  • Next.js【详解】获取数据(访问接口)
  • 反向代理模块kd
  • leaflet前端初始化项目
  • CMS DTcms 靶场(弱口令、文件上传、tasklist提权、开启远程桌面3389、gotohttp远程登录控制)
  • Docker 入门与实战:从安装到容器管理的完整指南
  • git删除本地分支
  • spring cloud gateway限流常见算法
  • 本地使用docker部署DeepSeek大模型
  • C++ 设计模式-外观模式
  • 【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)
  • SQL进阶技巧:如何统计用户跨端消费行为?
  • Fiddler笔记
  • 基于SpringBoot+Vue的老年人体检管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
  • 51c自动驾驶~合集51
  • Redis 监视器:深入解析与实战指南
  • Java8适配的markdown转换html工具(FlexMark)
  • 超全Deepseek资料包,deepseek下载安装部署提示词及本地部署指南介绍
  • Postman - Postman 导入 JSON 文件(导入集合或环境变量)
  • 傅里叶分析之掐死教程
  • ​实在智能与宇树科技、云深科技一同获评浙江省“人工智能服务商”、 “数智优品”​等荣誉