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

ops/2025/2/20 17:06:14/

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.ppmy.cn/ops/159705.html

相关文章

备战蓝桥杯 Day2 枚举 Day3 进制转换

Day2 枚举 1.要点 枚举要细致&#xff0c;考虑所有情况&#xff0c;一般为填空题&#xff0c;根据题目选择手算还是机算 Day3 进制转换 进制转换 1.要点 1.任意k进制转换为十进制 输入字符串得到某个k进制数组a(从1开始&#xff0c;长度为n) ll y0; for(int i1;i<n;…

社群共建与共享:以十点读书会为例探讨开源AI智能名片2+1链动模式S2B2C商城小程序的应用

摘要&#xff1a; 在数字化浪潮席卷全球的今天&#xff0c;社群作为连接个体、促进知识共享与价值共创的新型组织形式&#xff0c;正展现出前所未有的活力与潜力。本文以十点读书会为例&#xff0c;深入剖析了社群共同目标在凝聚人心、推动社群发展中的作用&#xff0c;并在此…

RIME-CNN-SVM故障诊断

构建一个高效、准确的基于卷积神经网络&#xff08;CNN&#xff09;的电力系统故障识别与分类仿真系统&#xff0c;实现对电力系统故障的精准识别与分类。在这一模型中&#xff0c;CNN被用来执行故障数据的特征提取与抽象化处理&#xff0c;随后&#xff0c;这些经过抽象的特征…

基于Spring Boot的社区居民健康管理平台的设计与实现

目录 1 绪论 1.1 研究现状 1.2 研究意义 1.3 组织结构 2 技术介绍 2.1 平台开发工具和环境 2.2 Vue介绍 2.3 Spring Boot 2.4 MyBatis 2.5 环境搭建 3 系统需求分析 3.1 可行性分析 3.2 功能需求分析 3.3 系统用例图 3.4 系统功能图 4 系统设计 4.1 系统总体描…

【做一个微信小程序】校园地图页面实现

前言 上一个教程我们实现了小程序的一些的功能&#xff0c;有背景渐变色&#xff0c;发布功能有的呢&#xff0c;已支持图片上传功能&#xff0c;表情和投票功能开发中&#xff08;请期待&#xff09;。下面是一个更高级的微信小程序实现&#xff0c;包含以下功能&#xff1a;…

Qt开发③Qt的信号和槽_概念+使用+自定义信号和槽+连接方式

目录 1. 信号和槽概述 1.1 事件和控件 1.2 信号的本质 1.3 槽的本质 2. 信号和槽的使用 2.1 connect 连接信号和槽 2.2 查看内置信号和槽 2.3 Qt Creator 生成信号槽代码 3. 自定义信号和槽 3.1 不带参数的信号和槽 3.2 带参数的信号和槽 4. 信号与槽的连接方式 4…

DeepSeek在学术读写翻译中的独特优势

上下文理解能力 DeepSeek的核心优势之一在于其卓越的上下文理解能力。它能够根据前文内容准确理解和回应用户的提问或指令&#xff0c;确保对话的连贯性和相关性。这一能力在处理长篇对话和复杂文本时尤为重要&#xff0c;能够帮助用户更好地把握整体逻辑和细节。 2. 翻译专业…

SOME/IP--协议英文原文讲解7

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.1.5 De-…