数据结构——串,数组和广义表详解

news2024/12/24 9:16:08

目录

1.串的定义 

1.串的几个术语 

2.案例引入 

3.串的类型定义,存储结构及运算 

1.串的顺序存储结构 

代码示例:

2.串的链式存储结构 

代码示例:

3.串的模式匹配算法 

1.BF算法 

1.BF算法设计思想 

2.BF算法描述 

代码示例:

3.BF算法时间复杂度 

2.KMP算法 

1.KMP算法设计思想 

2.KMP算法描述 

 

代码示例:

3.next函数的改进 

4.数组 

1.数组的抽象数据类型定义 

2.基本操作 

3.数组的顺序存储 

4.三维数组 

5.n维数组 

6.特殊矩阵的压缩存储 

1.对称矩阵

2.三角矩阵 

3.对角矩阵 

7.稀疏矩阵存储 

1.稀疏矩阵的压缩存储方法 

2.稀疏矩阵的链式存储结构:十字链表 

5.广义表 

1.广义表的性质 

2.广义表与线性表的区别 

3.广义表的基本运算 

6.案例分析与实现 

7.总的代码


 

fd328a6429a843bb8009f3f92f59e850.png

1.串的定义 

1a69f2062cac473387f1b51ea43c042b.png

9b33c375f373458cb2e6b9b80e6d5eae.png

1.串的几个术语 

350702f14dc44f87bd75b6dc27be1ae0.png

7e61b12bc64c4b9dbab08ff1903cdefe.png

365cf4cc2f9e44bba9df34538c0f3429.png

2.案例引入 

1a17459d941f4a37bd88ae3696ed7870.png

3a6493a645354d80891061fcfba5be76.png

3.串的类型定义,存储结构及运算 

ff179dd46560473d8134dacce12e21fa.png

8b8344b83772420295e78210bb65fcc9.png

85188febe5c64715bed36a30b3676ffc.png

1.串的顺序存储结构 

75c6a9bc9dc947e4a4e91f00a16e4981.png

代码示例:

#define maxlen 255
typedef struct{
	char ch[maxlen + 1];
	int length;
}sstring;

2.串的链式存储结构 

126cff7703724dcc8cdfc0baadd43d5a.png

70277eba9199498e81654e2e65f081aa.png

代码示例:

#define chunksize 80
typedef struct chunk{
	char ch[chunksize];
	struct chunk *next;
}chunk;

typedef struct{
	chunk *head,*tail;
	int curlen;
}lstring;

3.串的模式匹配算法 

18ac8cfce19645cf9d39e9d8bfc28836.png

1.BF算法 

97bea1cc21b346f4969d3ec3e298219c.png

70b1048d9058480089932a9fb11d3bcb.png

9471fa7b56f5447986e5d5edd1db7036.png

7ddbc5f6957d4c53811ad9dc1e7d4c2d.png

1.BF算法设计思想 

9a3effd1be5e49fc94fe12de93cc84ee.png

2.BF算法描述 

8aea0399c54d452eb62088a320bd47ea.png

62b90b899c484e54bf948c03f3f5c09b.png

代码示例:
int index_bf(sstring s,sstring t,int pos)
{
	int i = pos,j = 1;
	while(i <= s.length && j <= s.length)
	{
		if(s.ch[i] == s.ch[j]) {i++,j++;}
		else{i = i - j + 2,j = 1;}
	}
	if(j >= t.length) return i - t.length;
	else return 0;
}
3.BF算法时间复杂度 

27f0bbde5bc64026b7a03659e7915900.png

2.KMP算法 

ec2b54b7ae8e4d95af1fb25b51ef5194.png

1.KMP算法设计思想 

a034a07287bc4faaa6e5c706437f20ff.png

ea5d697f2d3d49129b7c3befbd6924b9.png

a9530b0678944f78a189a783506d45be.png

2.KMP算法描述 

517b31f4d0fc4478a047a72e5f5a2ed7.png

 

7597c3ebd5564e60be3bdf2f678b41bf.png

代码示例:
void get_next(sstring t,int next[])
{
	int i = 1;
	next[1] = 0;
	int j = 0;
	while(i < t.length)
	{
		if(j == 0 || t.ch[i] == t.ch[j])
		{
			i++;j++;
			next[i] = j;
		}
		else j = next[j];
	}
}

int index_kmp(sstring s,sstring t,int pos)
{
	int i,j;
	i = pos,j = 1;
	int next[100];
	get_next(t,next);
	while(i < s.length && j < t.length)
	{
		if(j == 0 || s.ch[i] == t.ch[j]){i++; j++;}
		else
			j = next[j];
	}
	if(j > t.length) return i - t.length;
	else return 0;
}
3.next函数的改进 

65528b47e0434f128ff6d7af833b5ea0.png

20b525c95a4543419dc2472e39c2b7a6.png

835a629e24494412b3740d1666b1ed3a.png

4.数组 

2cc70998bcb74413bd8dd6da7e880685.png

c441e1c91e684c43b4b7b71afa6a656f.png

ca57789e945c45a38cad4a65c34d1158.png

4290d6621b1142919bbad24e8d1a014e.png

1.数组的抽象数据类型定义 

c9fbdb9838d440de899e027d648a8ed9.png

5ae16bae0d2c44c398471e9523032896.png

2.基本操作 

e53ae8db69e2421e91eb12814e73c1e9.png

3.数组的顺序存储 

182c17bc76924b1aaeab76ab5b2e1005.png

cec32db32bf44f5a948f197b35791291.png

d1d811ed6ebc4ea8b39764681a94e244.png

5f4a52a067a645359cea243bbf7d501a.png

0672491aa97649d5b93476a5c3d8a9f9.png

cc0d1348da6c4927a527f91e80fab46b.png

175f7edbc9014ebb946aacc03e1a51e4.png

4.三维数组 

6ff9a37b6a024e918247223ad8718811.png

cb90b8cc90754995a05829bbfbde5b91.png

5.n维数组 

a1baf912dc73425382eeb9bdf2192889.png

70ff6098e450440a9f8291a541350ea8.png

e6cef8dfae874f62a9bad774b0f5dd80.png

6.特殊矩阵的压缩存储 

f21c25aaf55a425f96080d8fc1e06020.png

58efa79b4ca9443e90c3b6bbacb54606.png

1.对称矩阵

5d659de773ad43bba2e258783ad1cf37.png

5ef293ac01bc4234a5977f0aaf2a56be.png

2.三角矩阵 

fdeb03cb1bc6447183d757f967258e9b.png

3.对角矩阵 

b9583528617948559089b1970ba4610a.png

354fb8ea3be34d64af7e576fc20dccf4.png

7.稀疏矩阵存储 

ef9a71c5d0144195a37e300aad474f4c.png

9bdf7e067db14d91b4d5e276257d6788.png

1.稀疏矩阵的压缩存储方法 

394873d994b443e9a9ce5202844c9e02.png

198246bf2f244f8c9ecf9231815af05b.png

698376077b4d4353b7e18d0860fe4b47.png

132d7b18323942b9800ad29fe3ae176d.png

2.稀疏矩阵的链式存储结构:十字链表 

9fdf3cbbd93d4fc1b4736f8aeff17c7e.png

eb24941e0c78421ebd5493839a97a031.png

37477da9ceb44b3b8369d776f70dce26.png

5.广义表 

464ea144603148939841d9bb767f60be.png

5f9280072921419aa7986eeee0332c74.png

ac0726ef1f32481d9f05182766a44e82.png

1.广义表的性质 

2c7a6202b6d64ef39cbeed561e172f41.png

80b1ab00039745658c866bf955460c6d.png

2.广义表与线性表的区别 

ed97c489ddaa4973ae1d0691f4476110.png

3.广义表的基本运算 

e997aa354e5b4de1b9576f423fb55f48.png

6.案例分析与实现 

fe5312328f2943979c4060d6d3dd82e2.png

3d24a4b2968d49e0bd50bd388adf7548.png

7.总的代码

#include<bits/stdc++.h>
using namespace std;

#define maxlen 255
typedef struct{
	char ch[maxlen + 1];
	int length;
}sstring;

#define chunksize 80
typedef struct chunk{
	char ch[chunksize];
	struct chunk *next;
}chunk;

typedef struct{
	chunk *head,*tail;
	int curlen;
}lstring;

int index_bf(sstring s,sstring t,int pos)
{
	int i = pos,j = 1;
	while(i <= s.length && j <= s.length)
	{
		if(s.ch[i] == s.ch[j]) {i++,j++;}
		else{i = i - j + 2,j = 1;}
	}
	if(j >= t.length) return i - t.length;
	else return 0;
}

void get_next(sstring t,int next[])
{
	int i = 1;
	next[1] = 0;
	int j = 0;
	while(i < t.length)
	{
		if(j == 0 || t.ch[i] == t.ch[j])
		{
			i++;j++;
			next[i] = j;
		}
		else j = next[j];
	}
}

int index_kmp(sstring s,sstring t,int pos)
{
	int i,j;
	i = pos,j = 1;
	int next[100];
	get_next(t,next);
	while(i < s.length && j < t.length)
	{
		if(j == 0 || s.ch[i] == t.ch[j]){i++; j++;}
		else
			j = next[j];
	}
	if(j > t.length) return i - t.length;
	else return 0;
}

int main(){
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Github 2024-03-18开源项目日报Top10

根据Github Trendings的统计,今日(2024-03-18统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目7TypeScript项目3非开发语言项目1Solidity项目1《Hello 算法》:动画图解、一键运行的数据结构与算法教程 创建周期:476 天协议类型…

数据分析 | NumPy

NumPy&#xff0c;全称是 Numerical Python&#xff0c;它是目前 Python 数值计算中最重要的基础模块。NumPy 是针对多维数组的一个科学计算模块&#xff0c;这个模块封装了很多数组类型的常用操作。 使用numpy来创建数组 import numpy as npdata np.array([1, 2, 3]) print…

二叉搜索树、B-树、B+树

二叉搜索树 二叉查找树&#xff0c;也称为二叉搜索树、有序二叉树或排序二叉树&#xff0c;是指一棵空树或者具有下列性质的二叉树&#xff1a; 若任意节点的左子树不空&#xff0c;则左子树上所有节点的值均小于它的根节点的值&#xff1b;若任意节点的右子树不空&#xff0…

【C++】手撕红黑树

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;能直接手撕红黑树。 > 毒鸡汤&#xff1a;行到…

HTML5、CSS3面试题(二)

上一章:HTML5、CSS3面试题&#xff08;一&#xff09; 哪些是块级元素那些是行内元素&#xff0c;各有什么特点 &#xff1f;&#xff08;必会&#xff09; 行内元素: a、span、b、img、strong、input、select、lable、em、button、textarea 、selecting 块级元素&#xff1…

VSCode + PicGo + Github 实现markdown图床管理

目录 PicGo客户端VSvode插件 PicGo客户端 PicGo 是一个图片上传管理工具 官网&#xff1a;https://molunerfinn.com/PicGo/ github图传使用说明&#xff1a;https://picgo.github.io/PicGo-Doc/zh/guide/config.html#GitHub图床 步骤&#xff1a; 1、创建一个github公开仓库…

Mac玩《幻兽帕鲁》为什么打不开D3DMetal?d3d错误怎么办 d3dxl error

我之前发了一篇讲Mac电脑玩Steam热门新游《幻兽帕鲁》的文章&#xff08;没看过的点这里&#xff09;&#xff0c;后来也看到很多朋友去尝试了&#xff0c;遇到了一些问题&#xff0c;无法进入《幻兽帕鲁》游戏&#xff0c;或者是玩的时候卡顿以及出现黑屏&#xff0c;通过我的…

vue 基于elementUI/antd-vue, h函数实现message中嵌套链接跳转到指定路由 (h函数点击事件的写法)

效果如图&#xff1a; 点击message 组件中的 工单管理&#xff0c; 跳转到工单管理页面。 以下是基于vue3 antd-vue 代码如下&#xff1a; import { message } from ant-design-vue; import { h, reactive, ref, watch } from vue; import { useRouter } from vue-router; c…

智慧公厕对于智慧城市管理的意义

近年来&#xff0c;智慧城市的概念不断被提及&#xff0c;而智慧公厕作为智慧城市管理的重要组成部分&#xff0c;其在监测、管理和养护方面发挥着重要的作用。智慧公厕不仅是城市市容提升的重要保障&#xff0c;还能提升城市环境卫生管理的质量&#xff0c;并有效助力创造清洁…

代码+视频,R语言使用BOOT重抽样获取cox回归方程C-index(C指数)可信区间

bootstrap自采样目前广泛应用与统计学中&#xff0c;其原理很简单就是通过自身原始数据抽取一定量的样本&#xff08;也就是取子集&#xff09;&#xff0c;通过对抽取的样本进行统计学分析&#xff0c;然后继续重新抽取样本进行分析&#xff0c;不断的重复这一过程N&#xff0…

python redis中blpop和lpop的区别

python redis中lpop()方法是获取并删除左边第一个对象。 def lpop(self,name: str,count: Optional[int] None,) -> Union[Awaitable[Union[str, List, None]], Union[str, List, None]]:"""Removes and returns the first elements of the list name.By de…

Java在线租车汽车租赁系统设计与实现(Idea+Springboot+mysql)

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

17 deque

容器适配器 适配器 适配器是一种射击模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结)&#xff0c;该种模式是将一个类的接口转换成客户希望的另一个接口 STL库中的stack和queue的结构 虽然stack和queue也可以存放元素&#xff0c;但…

【STL】deque双端开口容器

1.关于deque容器说明 deque容器与vector容器差不多&#xff0c;但deque是双端开口容器&#xff0c;可以在两端插入和删除元素 push_front( )//在头部插入push_back( )//在尾部插入pop_front( )//在头部删除pop_back( ) //在尾部删除 其他相应函数与vector差不多&#xff0c;…

2024 年(第 12 届)“泰迪杯”数据挖掘挑战赛—— C 题:竞赛论文的辅助自动评阅完整思路与源代码分享

一、问题背景 近年来我国各领域各层次学科竞赛百花齐放&#xff0c;层出不穷&#xff0c;学生参与度也越来越高。随着参赛队伍的增 加&#xff0c;评阅论文的工作量急剧增加&#xff0c;这对评阅论文的人力要求也越来越大。因此引入机器辅助评阅成为竞赛主办方的现实需求。 在…

AI智能客服的开发流程

实现智能客服涉及多个步骤&#xff0c;包括数据收集、模型训练、部署和优化。以下是一个基本的实现智能客服的流程&#xff0c;希望对大家有所帮助。 1.数据收集&#xff1a; 收集与客服相关的数据&#xff0c;包括对话记录、常见问题、知识库等。 数据可以来自历史的客服对话…

成都伊理威:开抖音小店到底能赚钱吗

在数字时代的浪潮中&#xff0c;抖音如同一颗璀璨的新星&#xff0c;吸引了无数创业者的目光。不少人心中盘旋着同一个问题&#xff1a;“开抖音小店&#xff0c;真的能赚钱吗?”事实上&#xff0c;答案并非简单的“能”或“不能”&#xff0c;而是一个充满变数的命题。 开设抖…

蓝桥杯真题|02普及-真题

目录 [蓝桥杯 2017 省 B] 日期问题 题目描述 输入格式 输出格式 输入输出样例 代码及思路 [蓝桥杯 2021 省 B] 时间显示 题目描述 输入格式 输出格式 输入输出样例 说明/提示 代码及思路 [蓝桥杯 2017 省 B] 日期问题 题目描述 小明正在整理一批历史文献。这些历…

uniapp+uview 学习笔记(一)—— H5开发

文章目录 前言一、开发步骤1.创建项目2.安装组件库并导入使用3.封装请求4.国际化5.打包 总结 前言 本文主要介绍使用uniapp框架和uview组件库进行H5开发&#xff0c;需要用到的开发工具为HBuilder X。 一、开发步骤 1.创建项目 打开HBuilder X&#xff0c;在顶部栏目选择 新…

使用map和set实现简单的词频统计

一、运行效果图 二、代码示例 #include <iostream> #include <fstream> #include <sstream> #include <string> #include <map> #include <set> #include <vector> #include <algorithm> using namespace std;class TextQuer…