IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 千万数据量秒级查询 -> 正文阅读

[数据结构与算法]千万数据量秒级查询

**

详情见我的博客小生博客

**

双链表应用——千万数据量秒级查询

原理

利用双链表,
将数据全部读入内存,将读到的数据头插插入双链表,
因为链表头插效率高
然后在内存中检索数据,检索到就输出

代码片段

// 读取文件
file,_ := os.Open(path) // 打开文件
br := bufio.NewReader(file) // 读出文件对象
for{
	line,_,end := br.ReadLine()
	if end == io.EOF{
		break  //文件结束跳出循环
	}
	linestr := string(line) 
}

代码

package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
	"strings"
	"time"
)

type DoubleLinkNode struct{
	Value interface{}
	Next *DoubleLinkNode
	Pre *DoubleLinkNode
}

type MyDoubleLinkList struct{
	Lens int
	Head *DoubleLinkNode
}

func NewDoubleLinkNode(value interface{})*DoubleLinkNode{
	return &DoubleLinkNode{
		Value: value,
		Next:  nil,
		Pre:   nil,
	}
}

//func (DoubleLinkNode)

func Constructor()*MyDoubleLinkList{
	return &MyDoubleLinkList{
		Lens: 0,
		Head: nil,
	}
}

// GetLength 获取长度
func (this *MyDoubleLinkList)GetLength()int{
	return this.Lens
}

// InsertHead 头插
func (this *MyDoubleLinkList)InsertHead(node *DoubleLinkNode){
	bak := this.Head
	this.Head = node
	this.Head.Pre = nil

	this.Head.Next = bak
	if this.Head.Next!=nil{
		this.Head.Next.Pre = this.Head
	}
	this.Lens++
}

func (this *MyDoubleLinkList)toString(){
	node := this.Head
	str := ""
	fmt.Println("lens:", this.Lens)
	for node != nil{
		str += fmt.Sprintf("%v-->", node.Value)
		node = node.Next
	}
	str += fmt.Sprintf("nil")
	fmt.Println(str)
}

func (this *MyDoubleLinkList)FindStr(value string)interface{}{
	node := this.Head

	for node!= nil{
		if strings.Contains(node.Value.(string), value){
			fmt.Println("找到:", node.Value.(string))
		}
		node = node.Next
	}
	return false
}

func main() {
	l := Constructor()
	startTime := time.Now()
	pathList := []string{
		"D:\\itcast\\社工\\压缩\\猴岛游戏社区\\houdao\\1_1.txt",
		"D:\\itcast\\社工\\压缩\\猴岛游戏社区\\houdao\\1_2.txt",
		"D:\\itcast\\社工\\压缩\\猴岛游戏社区\\houdao\\1_3.txt",
	}
	for i:=0; i<len(pathList);i++{
		path := pathList[i]
		file,_ := os.Open(path) // 打开文件
		br := bufio.NewReader(file) // 读出文件对象
		for{
			line,_,end := br.ReadLine()
			if end == io.EOF{
				break  //文件结束跳出循环
			}
			linestr := string(line) //转化为字符串
			node := NewDoubleLinkNode(linestr) //新建节点
			l.InsertHead(node)
		}
	}
	fmt.Printf("内存载入完成, 数据量:%d, 用时:%v", l.GetLength(), time.Since(startTime))

	for;;{
		fmt.Println("\n请输入要查询的信息:")
		var str string
		fmt.Scanln(&str)
		startTime2 := time.Now()
		l.FindStr(str)
		fmt.Printf("查询完成,用时:%v", time.Since(startTime2))
	}
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-12-01 17:57:48  更:2021-12-01 17:59:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 14:45:55-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码