数据结构

数据结构(二) -- 数组和链表

一曲冷凌霜 提交于 2020-02-13 14:04:37
/*--> */ /*--> */ /*--> */ /*--> */ 数据结构(二) -- 数组和链表 数据结构主要可以分为两大模块: 线性结构 非线性结构 本文主要开始讲线性结构。 什么是线性结构 线性结构,顾名思义,就是这些数据所有节点都能被一根线(指针)联系起来的一种结构。 线性结构的存储方式: 连续存储:【数组】 离散存储:【链表】 线性结构的常见应用方式: 栈 队列 专题 :【递归】 数组和链表 本小节学习数组和链表,从底层去了解和实现数组与链表,并分析两者对应的优缺点 数组 数组是最常见的链式存储结构,它是一段连续的内存空间,在内存中我们可以简单表示为下图样式 通过上图我们可以把代码中 int arr[6] = {1,2,3,4,5,6}; 执行的操作从内存中脑补出来,同时我们可以简单分析一下,数组应该有的一些基本使用。如 初始化、 添加新元素、 插入新元素、 删除某个元素、 判断是否为空数组、 是否是满数组、 排序 倒序 查询是否包含某个元素 ······ 本小节就带着你手把手实现一个简单的数组的封装,借此来了解数组的数据结构以及内部的一些基本算法知识。这里就简单的以一个 int 类型的数组来示例,后面学到泛型的时候便可更加好的理解数组的实现。 首先简单分析一下数组中基本的属性,我们有上面的数组内存中的逻辑图可以确定数组有对应的内存空间,有一个内存起始地址

数据结构一:链表(linux链表)

邮差的信 提交于 2020-02-13 11:25:00
一:实现机制 linux链表实现思想就是:结点里面只创建一个next指针,用指针将各个结点相连接 打印和查找的时候,再进行类型的转换 二:代码 1 LinkList.h /* LinkList.h linux链表实现思想就是:结点里面只创建一个next指针,用指针将各个结点相连接 打印和查找的时候,在进行类型的转换 */ # ifndef _LINKLIST_H_ # define _LINKLIST_H_ # include <stdlib.h> # include <stdio.h> //链表小结点 和普通链表相比较 没有数据域 只有next指针 typedef struct LINNODE { struct LINNODE * next ; } Link_Node ; //链表,有头结点和长度 typedef struct LINKLIST { Link_Node head ; // Link_Node的结构体,而不是结构体指针 int size ; //结点个数 } Link_List ; //查找回调函数 typedef int ( * FIND ) ( Link_Node * data1 , Link_Node * data2 ) ; //打印回调函数 typedef void ( * PRINT ) ( Link_Node * data ) ; //初始化 Link

数据结构课设任务内容

ⅰ亾dé卋堺 提交于 2020-02-12 23:09:42
1.单位员工通讯录管理系统(线性表的应用) 【问题描述】 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。 [实现提示] 可以采用单链表的存储结构,如可定义如下的存储结构: typedef struct { / 员工通讯信息的结构类型定义 / char num[5]; / 员工编号 / char name[10]; / 员工姓名 / char phone[15]; / 办公室电话号码 / char call[15]; / 手机号码 / char mail[25]; / 邮箱 /## 标题 } ElemType; / 通讯录单链表的结点类型 / typedef struct LNode { ElemType data; / 结点的数据域 / struct LNode *next; / 结点的指针域 / }LNode,*LinkList; 2.算法设计思路 创建通讯录方法,录入员工信息,当记录第一个员工信息,头节点不再为空,把第一个节点赋予给下一个结点,继续录入,直到完成,把尾结点赋予成空。 创建多个方法 void CreateList ( LinkList & L ) //创建通讯录 void GetdataList ( LinkList & L )

学习数据结构与算法(二)

北城余情 提交于 2020-02-12 20:53:12
Hello,everyone ! 想以一个轻松愉悦的心情来开始我的每一篇文章。 这是每一次的整理和缩影,希望大家可以发表意见,促进成长。 正值这个特殊时期,在家里开始研究数据结构与算法的问题,若有不对的地方,请各位指教!~~~ 接下来主要看一下数组。 一.使用 1.创建数组 最简单的方法就是通过 [ ] 操作符来声明一个变量(推荐这种方法) var numbers=[]; print(numbers.length); //0 还可以用Array的构造函数创建数组 var numbers=new Array(1,2,3); print(numbers.length); //5 在脚本语言里很常见的一个特性,数组中的元素不必是同一种数据类型,这一点和很多编程语言不同。 var sbjects=["Joe",1,true,null]; 可以通过Array.isArray 来判断一个对象是否是数组。 2.读写数组(这里不做介绍) 3.由自负床生成数组 .split() var sentence="12454314"; var array=sentence.split("4"); for(var i=0;i<array.length;++i){ print("word"+i+":"+array[i]); } //word 0:124 //word 1:54 //word 2:314 4

List、Set、数据结构、Collections

浪子不回头ぞ 提交于 2020-02-12 19:38:34
List、Set、数据结构、Collections 数据结构 常见的数据结构 数据存储的常用结构有: 栈、队列、数组、链表和红黑树 栈 栈 : stack ,又称堆栈,它是运算受限的线性表,其限制是仅允许在标的一端进行插入和删除操作,不允许在其他任何位置进行添加、查找、删除等操作。 简单的说:采用该结构的集合,对元素的存取有如下的特点 先进后出(即,存进去的元素,要在后它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。 栈的入口、出口的都是栈的顶端位置。 需要注意两个名词: 压栈 :就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。 弹栈 :就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。 队列 队列 : queue ,简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。 简单的说,采用该结构的集合,对元素的存取有如下的特点: 先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)。例如,小火车过山洞,车头先进去,车尾后进去;车头先出来,车尾后出来。 队列的入口、出口各占一侧。例如,下图中的左侧为入口,右侧为出口。 数组 数组 :

Redis系列(一):Redis简介及环境安装

╄→尐↘猪︶ㄣ 提交于 2020-02-12 16:31:02
原文: Redis系列(一):Redis简介及环境安装 提到Redis,大家肯定都听过,并且应该都在项目中或多或少的使用过,也许你觉得Redis用起来挺简单的呀,但如果有人问你下面的几个问题(比如同事或者面试官),你能回答的上来吗? 什么是Redis? Redis能存储哪几种数据结构? Redis有几种持久化机制?它们的优缺点分别是什么? 哪些场景需要使用Redis? 什么是缓存雪崩,如何避免? 什么是缓存穿透,如何避免? 什么是缓存击穿,如何避免? 如果你都能回答的上来,恭喜你,说明你对Redis有一定的了解,如果回答不上来,也没关系,本系列博客会对Redis进行一系列的讲解,欢迎关注! 所谓工欲善其事,必先利其器,既然要学习Redis,首先我们至少得知道什么是Redis以及如何安装Redis环境,这也是本篇博客的主要内容。 1. Redis简介 什么是Redis呢? Redis是一个开源(BSD许可)的内存数据结构存储,用作数据库、缓存和消息代理。它支持诸如字符串、散列、列表、集合、有序集合等数据结构。 -- Redis官网 Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的高性能的key-value数据库。 -- 百度百科 Redis是一款依据BSD开源协议发行的高性能key-value存储系统,通常被称为数据结构服务器。 -- 其它网友

java数据结构-查找算法-二分算法

痞子三分冷 提交于 2020-02-12 14:24:00
package com.fu;/** * @auther 付强 * @date 2020/2/12 - 12:58 *///二分查找public class testsearch1 { public static void main(String[] args) { int arr[]={1,3,5,7,11,12,14}; //定义一个要查找的值 int s=12; //设置一个中位数 int mid; //定义最小值 int min=0; //定义最大值 int max=arr.length-1; //索引 int index=-1; while(true){ mid=(min+max)/2; if(arr[mid]>s){ max=mid-1; } if(arr[mid]<s){ min=mid+1; }if(arr[mid]==s){ index=mid; break; } } System.out.println(index); }} 来源: https://www.cnblogs.com/fuqiang-java/p/12298714.html

大话数据结构笔记——第四章 栈与队列

做~自己de王妃 提交于 2020-02-12 13:58:43
栈 1 栈的定义 1)栈的定义 2)进栈出栈变化形式 2 栈的抽象数据类型 3 栈的顺序存储结构及实现 1)栈的顺序存储结构 2)栈的顺序存储结构——进栈操作 3)栈的顺序存储结构——出栈操作 4 两栈共享空间 5 栈的链式存储结构及实现 1)栈的链式存储机构 2)栈的链式存储结构——进栈操作 3)栈的链式存储结构——出栈操作 进栈出栈时间复杂度均为O(1)。 6 栈的作用 7 栈的应用——递归 1)斐波那契数列实现 用数学函数来定义: 2)递归定义 8 栈的应用——四则运算表达式求值 1)后缀(逆波兰)表示法定义 2)后缀(逆波兰)表达式计算机结果 3)中缀表达式转后缀表达式 队列 1 队列的定义 2 队列的抽象数据类型 3 循环队列 1)队列顺序存储的不足 2)循环队列定义 4 队列的链式存储结构及实现 1)队列的链式存储结构——入队操作 2)队列的链式存储结构——出队操作 总结 来源: https://www.cnblogs.com/superjishere/p/12296208.html

数据结构

落爺英雄遲暮 提交于 2020-02-12 13:43:00
include<stdio.h> include<stdlib.h> define max 30 typedef struct{ int *data; int front,rear; }circqueue; //给队列赋值 int firstadd(circqueue q){ q->data=(int )malloc(max*sizeof(int)); int x; printf("请输入赋值数:"); scanf("%d",&x); while(x!=0&&q->rear!=max-1){ q->data[q->rear++]=x; printf("请输入赋值数:"); scanf("%d",&x); } return 0; } //返回队列的元素个数 int returnmath(circqueue *q){ return (q->rear-q->front+max)%max; } //将元素插入x插入队尾 int enqueue(circqueue *q,int x){ if((q->rear+1)%max==q->front){ return 0; } q->data[q->rear]=x; q->rear=(q->rear+1)%max; return 1; } //删除队头元素并将其返回 int dequeue(circqueue *q){ if(q->front==q

新手在学习web前端过程中会遇到哪些困境

懵懂的女人 提交于 2020-02-12 12:22:21
刚刚学习 web 前端的新手在学习过程中或多或少都会遇到很多问题,下面和 小编一起来看看阻挡新手在学习 web 前端过程中的困境都有哪些,希望对正在学习的你能有所帮助。 一、 入门 web 前端时的一些困境 1 、因一些基础算法、数据结构理论不扎实导致一些编程思维难于理解。 比如原型链,如果清楚数据结构中链表结构,那么这个东西不难理解,再比如哈希值,懂得数据结构中哈希表,哈希值也就迎刃而解。 2 、计算机体系结构、操作系统理论、网络理论不扎实导致到后期一些东西难于理解。 比如有同学从前端学习入手,后来学习 node 开发,在 I/O , 进程、线程、 IPC 、线程锁方面有些概念就比较难于理解,而导致不能很好得使用 node 的 api 。 3 、前端整体体系架构没有做过深入思考。 导致用会用,但不知道为什么用,用另外一个有什么区别。 4 、学习环境中无高手。 没有高手能够指导自己进入下一个层次。 5 、有意识但是没有行动 我的网盘收集了一堆资料或者一堆视频,然后就没有然后了。 二、 如何才能快速入门前端 1 、学习东西,自学是一种途径,然而在自学的过程中,很多人处于不知道自己不知道的状态。 2 、另一种是跟着高手,开阔视野,达到知道自己不知道的境界,从而有方向,在短时期内进入到一个新的境界,节约时间成本。 来源: https://www.cnblogs.com/coffees/p