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

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];//head
        Hashlist s=create_node():
        s->data=key;
        //1.判断链表为空
        if(head==NULL)
        head=s;
        //2.存在多个节点
        s->next=head;
        head=s;
        hash[ sub]=head;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【STM32】DRV8833驱动电机

1.电机如何转动 只需要给电机两个端子加一正一负的极性就会转起来了&#xff0c;但是要注意的是不要将电机两端直接接在5v和gnd之间&#xff0c;这种电机一般要提供几百毫安的电流&#xff0c;而GPIO口只能提供几毫安&#xff0c;所以我们使用一个DRV8833来驱动 DRV8833输入口…

id生成系统和mp条件简化

目录 场景引入: 有哪些生成id的方式&#xff1f; 1.UUID 2.雪花算法方案 3.数据库生成 4.美团Leaf方案 Leaf-segment数据库方案 使用场景&#xff1a; 美团leaf的docker镜像安装 在leaf.properties中配置数据库的信息 创建sl_leaf数据库脚本&#xff1a; 测试&#x…

网络安全推荐的视频教程 网络安全系列

第一章 网络安全概述 1.2.1 网络安全概念P4 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护&#xff0c;不因偶然的或恶意的原因而遭到破坏、更改、泄露&#xff0c;系统连续可靠正常地运行&#xff0c;网络服务不中断。 1.2.3 网络安全的种类P5 &#xff08;1…

内网下,Ubuntu (24.10) 离线安装docker最新版教程

一般在数据比较敏感的情况下&#xff0c;是无法使用网络的&#xff0c;而对于Ubuntu系统来说&#xff0c;怎么离线安装docker呢&#xff1f; 下面我给大家来讲一下&#xff1a; 采用二进制安装&#xff1a; 1.下载docker离线包 官网下载&#xff1a; Index of linux/static…

基于SpringBoot+Vue的老年人体检管理系统的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

AI工具篇:利用DeepSeek+Kimi 辅助生成综述汇报PPT

随着科研和学术报告需求的增加&#xff0c;如何高效地准备一份结构清晰、内容充实的PPT已成为许多研究者的挑战。 传统的PPT制作过程繁琐&#xff0c;需要大量文献收集、数据分析和设计工作&#xff0c;而AI工具能够帮助提升效率&#xff0c;减少重复劳动。 本文将介绍如何使用…

【Spring详解一】Spring整体架构和环境搭建

一、Spring整体架构和环境搭建 1.1 Spring的整体架构 Spring框架是一个分层架构&#xff0c;包含一系列功能要素&#xff0c;被分为大约20个模块 Spring核心容器&#xff1a;包含Core、Bean、Context、Expression Language模块 Core &#xff1a;其他组件的基本核心&#xff…

为什么WP建站更适合于谷歌SEO优化?

在当今数字时代&#xff0c;建立一个网站似乎变得容易&#xff0c;但要构建一个真正能够带来流量和订单的网站却并非易事。特别是在谷歌SEO优化方面&#xff0c;不同的建站程序在SEO支持方面的效果差异显著。对于希望提升搜索引擎表现的用户来说&#xff0c;WordPress无疑是最佳…

Vue 项目中逐步引入 TypeScript 的类型检查

在现有的 Vue 项目中逐步引入 TypeScript 的类型检查 本文源于一道面试题&#xff1a;注&#xff1a;两种问法一个意思哈&#xff01;&#xff01; 问题一&#xff1a;“ 老项目Js写的&#xff0c;如何轻量方式享受 ts 类型&#xff1f;” 问题二&#xff1a;“如何 在现有的 …

win10系统上的虚拟机安装麒麟V10系统提示找不到操作系统

目录预览 一、问题描述二、原因分析三、解决方案四、参考链接 一、问题描述 win10系统上的虚拟机安装麒麟V10系统提示找不到操作系统&#xff0c;报错&#xff1a;Operating System not found 二、原因分析 国产系统&#xff0c;需要注意的点&#xff1a; 需要看你的系统类…

Spring中Bean的四种实例化方法

Bean的四种实例化方法 Bean是Spring核心的概念&#xff0c;另外一个核心的概念是AOP。官网上&#xff0c;Bean的解释是&#xff1a; In Spring, the objects that form the backbone of your application and that are managed by the Spring IoC container are called beans…

聚焦工控物联网网关

一、引言 在工业物联网高速发展的当下&#xff0c;工控物联网网关作为连接工业现场设备与上层管理系统、云平台的关键组件&#xff0c;其兼容性与可扩展性至关重要。工业生产新技术、新设备不断涌现&#xff0c;企业数字化转型需求持续增长&#xff0c;网关的适配与扩展能力直…

李宏毅机器学习笔记:【6.Optimization、Adaptive Learning Rate】

Optimization 1.Adaptive Learning Rate2.不同的参数需要不同的学习率3.Root Mean Square4.RMSProp5.Adam6.learning rate scheduling7.warm up总结 critical point不一定是你在训练一个network时候遇到的最大的障碍。 1.Adaptive Learning Rate 也就是我们要给每个参数不同的…

Redis7——基础篇(三)

前言&#xff1a;此篇文章系本人学习过程中记录下来的笔记&#xff0c;里面难免会有不少欠缺的地方&#xff0c;诚心期待大家多多给予指教。 基础篇&#xff1a; Redis&#xff08;一&#xff09;Redis&#xff08;二&#xff09; 接上期内容&#xff1a;上期完成了Redis的基本…

[LeetCode]day25 151.翻转字符串里的单词

题目链接 题目链接 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意&#xff1a;输入字符串 s中可能…

Visual Studio Code的下载安装与汉化

1.下载安装 Visual Studio Code的下载安装十分简单&#xff0c;在本电脑的应用商店直接下载安装----注意这是社区版-----一般社区版就足够用了---另外注意更改安装地址 2.下载插件 重启后就是中文版本了

华为昇腾 910B 部署 DeepSeek-R1 蒸馏系列模型详细指南

本文记录 在 华为昇腾 910B(65GB) * 8 上 部署 DeepSeekR1 蒸馏系列模型&#xff08;14B、32B&#xff09;全过程与测试结果。 NPU&#xff1a;910B3 (65GB) * 8 &#xff08;910B 有三个版本 910B1、2、3&#xff09; 模型&#xff1a;DeepSeek-R1-Distill-Qwen-14B、DeepSeek…

【MySQL排错 】mysql: command not found 数据库安装后无法加载的解决办法

【MySQL排错 】mysql: command not found 数据库安装后无法加载的解决办法 A Solution to Solve Error - mysql: command not found After The Installation of MySQL Community Server By JacksonML 本文简要介绍如何在macOS安装完毕MySQL数据库服务器后&#xff0c;针对无…

Spring-GPT智谱清言AI项目(附源码)

一、项目介绍 本项目是Spring AI第三方调用整合智谱请言&#xff08;官网是&#xff1a;https://open.bigmodel.cn&#xff09;的案例&#xff0c;回答响应流式输出显示&#xff0c;这里使用的是免费模型&#xff0c;需要其他模型可以去 https://www.bigmodel.cn/pricing 切换…

用deepseek学大模型08-卷积神经网络(CNN)

yuanbao.tencent.com 从入门到精通卷积神经网络(CNN),着重介绍的目标函数&#xff0c;损失函数&#xff0c;梯度下降 标量和矩阵形式的数学推导&#xff0c;pytorch真实能跑的代码案例以及模型,数据&#xff0c;预测结果的可视化展示&#xff0c; 模型应用场景和优缺点&#xf…