数据结构的魅力

数据结构这块越学越敬佩 博大精深

统计大文件中相同年龄的人的个数

public static void main(String[] args) throws Exception {
        String str = "";
        String fileName = "";
        InputStreamReader isr = new InputStreamReader(
                new FileInputStream(fileName), StandardCharsets.UTF_8);
        long start = System.currentTimeMillis();
        BufferedReader br = new BufferedReader(isr);
        int tot = 0;
        int[] data = new int[200];
        while ((str = br.readLine()) != null) {
            int age = Integer.parseInt(str);
            //巧用下标
            data[age]++;
            tot++;
        }
        System.out.println("总共数据大小" + tot);
        for (int i = 0; i < 200; i++) {
            System.out.println(i + ":" + data[i]);
        }
        System.out.println("花费时间" + (System.currentTimeMillis() - start) + "ms");
    }
private static final int DEFAULT_SIZE = 10;
	private Object data[];
	private int index;
	private int size;

	public MyArrayList() {
		this.data = new Object[DEFAULT_SIZE];
		this.size = DEFAULT_SIZE;
	}

	@Override
	public void add(E e) {
		data[index++] = e;
		if (index == size) { // ����
			this.size = this.size * 2 + 1;
			Object newData[] = new Object[this.size];
			for (int i = 0; i < data.length; i++) {
				newData[i] = data[i];
			}
			this.data = newData;
		}
	}

	@Override
	public void remove(int i) {
		if (i >= 0 && i < index) {
			for (int j = i; j < this.data.length - 1; j++) {
				data[j] = data[j + 1];
			}
			this.index--;
		}
	}

	@Override
	public E get(int i) {
		if (i >= 0 && i < index) {
			return (E) this.data[i];
		}
		return null;
	}

	@Override
	public int size() {
		return index;
	}

	@Override
	public boolean isEmpty() {
		if(index <= 0) return true;
		return false;
	}
	@Override
	public void remove(Object e) {
		if(!isEmpty()) {
			for(int i = 0 ; i < this.data.length ; i ++) {
				if(data[i].equals(e)) {
					remove(i);
					break;
				}
			}
		}
	}

 

 private int size;
    private int data[];
    private int index;

    public ArrayTest(int size) {
        index = 0;
        this.size = size;
        data = new int[size];
    }

    public void print() {
        System.out.println("index" + index);
        for (int i = 0; i < index; i++) {
            System.out.println(data[i] + "");
        }
        System.out.println();
    }

    public void insert(int loc, int n) {
        if (index++ < size) {
            for (int i = size - 1; i > loc; i--) {
                data[i] = data[i - 1];//数据后移
            }
            data[loc] = n;
        } else {

        }
    }

    public void delete(int loc) {
        for (int i = loc; i < size; i++) {
            if (i != size - 1) {
                data[i] = data[i + 1];
            } else {
                data[i] = -1;
            }
        }
        index--;
    }
public class MyLinkedList {

    private ListNode head;
    private int size = 0;

    public void insertHead(int data) {
        ListNode newNode = new ListNode(data);
        //先把后面的连上 再连前面的 重要! 先从尾开始,链表先从pre前开始
        newNode.next = head;
        head = newNode;
    }

    public void insertNth(int data, int position) {
        if (position == 0) {
            insertHead(data);
        } else {
            ListNode cur = head;
            //找到位置先
            for (int i = 1; i < position; i++) {
                cur = cur.next;
            }
            ListNode newNode = new ListNode(data);
            //猎杀时刻!
            newNode.next = cur.next;
            cur.next = newNode;
        }
    }

    public void deleteHead() {
        head = head.next;
    }

    public void deleteNth(int position) {
        if (position == 0) {
            deleteHead();
        } else {
            ListNode cur = head;
            for (int i = 1; i < position; i++) {
                cur = cur.next;
            }
            cur.next = cur.next.next;
        }
    }

    public void find(int data){
        ListNode cur = head;
        while (cur !=null){
            if(cur.value==data) break;
            cur = cur.next;
        }
    }

}

class ListNode {
    int value;
    ListNode next;

    ListNode(int value) {
        this.value = value;
        this.next = null;
    }
}
/**
 * //LRU
 *  //遍历,找到 删除 插入头部,最新
 *  //不在 有空间 插入头部 没有空间 删除最后一个
 */

public class DoubleLinkList {		// 双向链表

    private DNode head;		//头
    private DNode tail;		// 尾

    DoubleLinkList(){
        head = null;
        tail = null;
    }

    public void insertHead(int data){
        DNode newNode = new DNode(data);
        if(head == null){
            tail = newNode;
        }else{
            head.pre = newNode;
            newNode.next = head;
        }
        head = newNode;
    }
    public void deleteHead(){
        if(head == null) return ;		//没有数据
        if(head.next == null){		//就一个点
            tail = null;
        }else{
            head.next.pre = null;
        }
        head = head.next;
    }
    public void deleteKey(int data){
        DNode current = head;
        while (current.value != data) {
            if (current.next == null) {
                System.out.println("没找到节点");
                return ;
            }
            current = current.next;
        }
        if (current == head) {// 指向下个就表示删除第一个
            deleteHead();
        } else {
            current.pre.next = current.next;
            if(current == tail){		//删除的是尾部
                tail = current.pre;
                current.pre = null;
            }else{
                current.next.pre = current.pre;
            }
        }
    }
}

class DNode{

    int value;		//值
    DNode next;		//下一个的指针
    DNode pre;		//指向的是前一个指针

    DNode(int value){
        this.value = value;
        this.next = null;
        this.pre = null;
    }
}
public class ArrayStack<Item> implements MyStack<Item> {

    private int num = 0;
    private Item[] items = (Item[]) new Object[1];

    @Override
    public MyStack<Item> push(Item item) {
        judgeSize();
        items[num++] = item;
        return null;
    }

    public ArrayStack(int cap) {
        items = (Item[]) new Object[cap];
    }

    private void judgeSize() {
        if (items.length <= num) {
            resize(2 * items.length);
        } else if (num > 0 && num <= items.length / 2) {
            resize(items.length / 2);
        }
    }

    private void resize(int size) {
        Item[] temp = (Item[]) new Object[size];
        for (int i = 0; i < num; i++) {
            temp[i] = items[i];
        }
        items = temp;
    }

    @Override
    public Item pop() {
        if (isEmpty()) {
            return null;
        }
        Item item = items[--num];
        items[num] = null;
        return item;
    }

    @Override
    public int size() {
        return num;
    }

    @Override
    public boolean isEmpty() {
        return num == 0;
    }

}

/**
* [{({([({})])})}] 是否对称
**/
  public static boolean isOK(String s) {
        MyStack<Character> brackets = new ArrayStack<Character>(20);
        char c[] = s.toCharArray();
        Character top;
        for (char x : c) {
            switch (x) {
                case '{':
                case '(':
                case '[':
                    brackets.push(x);
                    break;
                case '}':
                    top = brackets.pop();
                    if (top != null && top == '{') {
                        break;
                    } else {
                        return false;
                    }
                case ')':
                    top = brackets.pop();
                    if (top != null && top == '(') {
                        break;
                    } else {
                        return false;
                    }
                case ']':
                    top = brackets.pop();
                    if (top != null && top == '[') {
                        break;
                    } else {
                        return false;
                    }
                default:
                    break;
            }
        }
        //进出对称 最后没有元素 都pop了
        return brackets.isEmpty();
    }

 


public class ArrayQueue {

    private final int[] data;//数据
    private int head;//头
    private int tail;//尾
    private int n = 0;//大小

    public ArrayQueue(int cap) {
        data = new int[cap];
        n = cap;
    }

    /**
     * 入队列
     *
     * @param m
     */
    public void push(int m) {
        if (tail == n)
            //满了
            return;
        data[tail] = m;
        tail++;
    }

    /**
     * 出队列
     *
     * @return
     */
    public int pop() {
        if (isEmpty()) return -1;
        int m = data[head];
        head++;
        return m;
    }

    public boolean isEmpty() {
        return head == tail;
    }

}
//循环
public class CircleArrayQueue {

    private final int[] data;//数据
    private int head;//头
    private int tail;//尾
    private int n = 0;//大小

    public CircleArrayQueue(int cap) {
        data = new int[cap];
        n = cap;
    }

    /**
     * 入队列
     *
     * @param m
     */
    public void push(int m) {
        if ((tail + 1) % n == head)
            //满了,头尾相连
            return;
        data[tail] = m;//尾插
        tail = (tail + 1) % n;//后移
    }

    /**
     * 出队列
     *
     * @return
     */
    public int pop() {
        if (isEmpty()) return -1;
        int m = data[head];
        head = (head + 1) % n;
        return m;
    }

    /**
     * 首尾重叠
     *
     * @return
     */
    public boolean isEmpty() {
        return head == tail;
    }

}

数据同步架构参考 

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

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

相关文章

蓝桥杯嵌入式(G431)备赛笔记——RTC

// RTC time// 声明一个变量 rtc_tick 用于记录上次 RTC 处理的时间 u32 rtc_tick 0;// 声明结构体变量 D 用于存储 RTC 的日期信息 RTC_DateTypeDef D;// 声明结构体变量 T 用于存储 RTC 的时间信息 RTC_TimeTypeDef T;// RTC_proc 函数&#xff0c;用于处理 RTC 时间 void R…

【单片机毕业设计8-基于stm32c8t6的RFID校园门禁系统】

【单片机毕业设计8-基于stm32c8t6的RFID校园门禁系统】 前言一、功能介绍二、硬件部分三、软件部分总结 前言 &#x1f525;这里是小殷学长&#xff0c;单片机毕业设计篇8基于stm32的RFID校园门禁系统 &#x1f9ff;创作不易&#xff0c;拒绝白嫖可私 一、功能介绍 -----------…

Spark-Scala语言实战(15)

在之前的文章中&#xff0c;我们学习了如何在spark中使用键值对中的学习键值对方法中的lookup&#xff0c;cogroup两种方法。想了解的朋友可以查看这篇文章。同时&#xff0c;希望我的文章能帮助到你&#xff0c;如果觉得我的文章写的不错&#xff0c;请留下你宝贵的点赞&#…

5. @Autowired与@Resource的区别

在上一节我们使用Autowired进行了bean的装配&#xff0c;Autowired与Resource都可以用来装配bean&#xff0c;但它们之前还是有一些区别&#xff0c;它们的区别具体体现为以下几点&#xff1a; 来源不同对Constructor注入的支持不同查找顺序不同支持参数不同 1. 来源不同 Re…

事务隔离级别(图文详解)

事务隔离级别(图文详解) 什么是事务? 事务是逻辑上的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。 事务最经典也经常被拿出来说例子就是转账了。假如小明要给小红转账1000元&#xff0c;这个转账会涉及到两个关键操作就是&#xff1a;将小明的余额减少1000元…

Chatgpt掘金之旅—有爱AI商业实战篇|SEO 咨询业务|(十七)

演示站点&#xff1a; https://ai.uaai.cn 对话模块 官方论坛&#xff1a; www.jingyuai.com 京娱AI 一、AI技术创业在SEO 咨询业务有哪些机会&#xff1f; 人工智能&#xff08;AI&#xff09;技术作为当今科技创新的前沿领域&#xff0c;为创业者提供了广阔的机会和挑战。随…

触发 hover 效果时,设置文字底部横杠显示

需求描述 需要在鼠标悬停时显示文字效果及下面出现一个横条&#xff0c;如图 <!-- 页面结构 --> <nav><ul><li>精选</li><li>女装</li><li>男装</li><li>彩妆</li><li>运动</li><li>家…

本科大学生计算机毕业设计案例:遗失物品信息管理系统

设计需求&#xff1a; 客户需求&#xff1a; 项目所用技术&#xff1a; 后端&#xff1a;springBoot,mybatisPlus,springSecurity,Swagger2 前端&#xff1a;vue-element-admin,elementUi 数据库&#xff1a;mysql&#xff0c;redis 数据库表设计&#xff1a; 关键代码展示&a…

Springboot+Vue项目-基于Java+MySQL的在线视频教育平台系统(附源码+演示视频+LW)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &…

linux学习:标准IO

目录 接口 打开文件 关闭文件 读写 每次一个字符的读写标准 IO 函数接口 每次一行的读写标准 IO 函数接口 每次读写若干数据块的标准 IO 函数接口 获取或设置文件当前位置偏移量 标准格式化 IO 函数 系统 IO 的最大特点一个是更具通用性&#xff0c;不管是普通文件、管…

障碍物识别技术赋能盲人独立出行:一场静默的科技革新

作为一名资深记者&#xff0c;我始终关注并报道那些科技如何助力特殊群体克服生活挑战的动人故事。近期&#xff0c;一款叫做蝙蝠避障的应用进入了我的视线&#xff0c;它搭载先进障碍物识别技术以其独特的优势&#xff0c;悄然为视障人士的独立出行带来了显著变革。 “障碍物识…

asm磁盘组无法写入问题-处理中

有个11204的rac环境&#xff0c;没应用补丁&#xff0c;5号突然报归档满&#xff0c;登录环境后发现奇怪&#xff0c;一个1T磁盘建成的DATA磁盘组使用了近800G&#xff0c;读写正常&#xff0c;一个1.5T磁盘建成的FRA磁盘组&#xff0c;目前还剩余729551M&#xff0c;无法写入归…

AutoCAD之DWF三维信息提取---linux编译篇

1. 权限 1.1 给文件添加执行权限 chmod x autogen.sh1.2.给当前文件下的所有文件改变为读写执行权限 chmod 777 * -R 2.环境安装 2.1安装automake 1.4.1 安装链接 安装中遇到的问题及解决 2.2安装autoconf 2.3 安装libtool 2.4 安装Cmake(CMake包含) cmake安装在cent…

STM32—DMA直接存储器访问详解

DMA——直接存储器访问 DMA&#xff1a;Data Memory Access, 直接存储器访问。 DMA和我们之前学过的串口、GPIO都是类似的&#xff0c;都是STM32中的一个外设。串口是用来发送通信数据的&#xff0c;而DMA则是用来把数据从一个地方搬到另一个地方&#xff0c;而且不占用CPU。…

windows本地运行dreamtalk踩坑总结

dreamtalk是一个语音图片转视频的一个工具&#xff0c;就是给一段语音加一个头像图片&#xff0c;然后生成一段头像跟语音对口型的视频&#xff0c;其实还是很有意思的&#xff0c;最近阿里发布了一个类似的模型&#xff0c;但是还没开源&#xff0c;从展示视频看&#xff0c;阿…

酷开科技OTT大屏营销:开启新时代的营销革命

随着互联网技术的不断发展和普及&#xff0c;大屏已经成为越来越多家庭选择的娱乐方式。在这个背景下&#xff0c;酷开科技凭借其强大的技术实力和敏锐的市场洞察力&#xff0c;成功地将大屏转化为一种新的营销渠道&#xff0c;为品牌和企业带来了前所未有的商业机会。 酷开科技…

WEB3.0:互联网的下一阶段

随着互联网的发展&#xff0c;WEB3.0时代正在逐步到来。本文将深入探讨WEB3.0的定义、特点、技术应用以及未来展望&#xff0c;为读者带来全新的思考。 一、什么是WEB3.0&#xff1f; WEB3.0可以被理解为互联网发展的下一阶段&#xff0c;是当前WEB2.0的升级版。相较于2.0时代…

CentOS 各个版本下载地址

https://mirror.nsc.liu.se/centos-store/7.6.1810/isos/x86_64/ CentOS-7-x86_64-DVD-1810.iso 2018-Nov-26 00:55:20 4.2G application/octet-stream 正常版 CentOS-7-x86_64-DVD-1810.torrent 2018-Dec-03 16:03:27 85.9K application/x-bittorrent CentOS-7-x86_64-Every…

用户系统加密--Java

一个基本的用户系统如下&#xff1a; # 定义用户类 class User:def __init__(self, name, password):self.name nameself.password password# 创建用户列表 users []# 添加新用户 def add_user(name, password):new_user User(name, password)users.append(new_user)print…

洛谷-P1596 [USACO10OCT] Lake Counting S

P1596 [USACO10OCT] Lake Counting S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using namespace std; const int N110; int m,n; char g[N][N]; bool st[N][N]; //走/没走 int dx[] {-1,-1,-1,0,0,1,1,1}; //八联通 int dy[] {-1,0,1,1,-1,1…