4-数据结构

news/2024/11/30 0:46:47/

数据结构(data structure

1. 简介
数据结构是在计算机中组织与存储数据的方式
如果想要表示“一排数字”,自然想到使用「数组」数据结构
数组的存储方式可以表示数字的相邻关系、顺序关系,但至于其中存储的是整数int,还是小数float, 或是字符char,则与所谓的数据的结构无关了
换言之,基本数据类型提供了数据的“内容类型”,而数据结构提供数据的“组织方式”
 


2.分类
数据结构主要可根据「逻辑结构」和「物理结构」两种角度进行分类
 


3.逻辑结构
「逻辑结构」反映了数据之间的逻辑关系。

//这里的逻辑关系指数据间的前后间关系,与数据在计算机中的存储位置无关。


一般将逻辑结构分为「线性」和「非线性」两种:

①线性数据结构:数组、队列、栈、链表、哈希表;

②非线性数据结构:(多维数组)、堆、树结构、图结构、哈希表;


 


4.物理结构
「物理结构(或存储结构)」反映了数据在计算机内存中的存储方式


从本质上看,分别是数组的连续空间存储和链表的离散空间存储

常用的物理结构(或存储结构)有:

①顺序结构(连续结构):在内存中用一组地址连续的存储单元依次存储线性表的各个数据元素。

②链式结构:在内存中的存储元素不一定是连续的,用任意地址的存储单元存储元素,元素节点存放数据元素以及通过指针指向相邻元素的地址信息。

③索引结构:除建立存储结点信息外,还需建立一张索引表(作用:标识节点的地址)。

//索引表由若干索引项组成。

④Hash结构(又称杂凑结构或散列结构):由节点的关键码值决定节点的存储地址。

所有数据结构都是基于数组、或链表、或两者组合实现的
例如栈和队列,既可以使用数组实现、也可以使用链表实现
而例如哈希表,其实现同时包含了数组和链表
●基于数组可实现:栈、队列、哈希表、树、堆、图、矩阵、张量(维度≥3的数组)等;
●基于链表可实现:栈、队列、哈希表、树、堆、图等;
基于数组实现的数据结构也被称为「静态数据结构」,这意味着该数据结构在在被初始化后,长度不可变
相反地,基于链表实现的数据结构被称为「动态数据结构」,该数据结构在被初始化后,我们也可以在程序运行中修改其长度

5.常见的几个数据结构

①数组(Array)

②队列(Queue)

----FIFO 即先进先出,相当于排队

③栈(Stack)

----FILO 即先进后出、后进先出,相当于坐电梯

例题1--说明栈的应用:hdu 1062“Text Reverse”(C++)

题目链接:Problem - 1062

Text Reverse

Problem Description

Ignatius likes to write words in reverse way. Given a single line of text which is written by Ignatius, you should reverse all the words and then output them.

Input

The input contains several test cases. The first line of the input is a single integer T which is the number of test cases. T test cases follow.
Each test case contains a single line with several words. There will be at most 1000 characters in a line.

Output

For each test case, you should output the text which is processed.

Sample Input

3 
olleh !dlrow 
m'I morf .udh 
I ekil .mca

Sample Output

hello world! 
I'm from hdu. 
I like acm.

Hint
Remember to use getchar() to read '\n' after the interger T, then you may use gets() to read a line and process it.

Author

Ignatius.L

题意:翻转字符串。

/*hdu 1062“Text Reverse” C++*/
#include<bits/stdc++.h>    
using namespace std;
int main(){int n;char ch;scanf("%d",&n);getchar();while(n--){stack<char> s;while(true){ch=getchar();//一次读入一个字符 if(ch==' '||ch=='\n'||ch==EOF){//如果这个单词或语句已结束 while(!s.empty()){//判断栈顶不为空 ,输出这个反文 		printf("%c",s.top());//输出栈顶 s.pop();//清除栈顶 }if(ch=='\n'||ch==EOF) break;//如果换行或结束就输出换行(跳出执行26行) printf(" ");//不是就输出空格隔开单词 }else s.push(ch);//若没结束,入栈 }printf("\n");}return 0;
}

④链表(Linked List)

⑤树(Tree)

⑥哈希表(Hash)

⑦堆(Heap)

⑧图(Graph)


http://www.ppmy.cn/news/47741.html

相关文章

Python并发编程在爬虫中的应用

并发编程在爬虫中的应用 本文将为大家介绍 Python 中的多线程、多进程和异步编程&#xff0c;并且以爬取“360图片”网站的图片并保存到本地为例&#xff0c;为大家分别展示使用单线程、多线程和异步 I/O 编程的爬虫程序有什么区别&#xff0c;同时也对它们的执行效率进行简单…

非计算机专业如何转行成为程序员?我用亲身经历教你用这三种方法

哈喽大家好啊&#xff01;我想分享一下&#xff0c;非计算机专业的学生如何转行成为程序员。首先&#xff0c;我先介绍一下我的情况。我是18年毕业的&#xff0c;大学学的专业是土木工程&#xff0c;与计算机一点关系都没有。但是在大学时&#xff0c;我对程序员比较感兴趣。本…

(包教包会)最强分布式锁工具:Redisson

今天来聊聊分布式锁的最强实现&#xff1a;Redisson 从分布式锁到Redisson实现非常详细&#xff0c;适合慢慢咀嚼~ 一. Redisson概述 1.1 什么是Redisson&#xff1f; Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。…

八、vue-基础之列表渲染v-for、v-for中的key属性的作用

一、v-for列表渲染 在真实开发中&#xff0c;我们往往会从服务器拿到一组数据&#xff0c;并且需要对其进行渲染。 这个时候我们可以使用v-for来完成&#xff1b;v-for类似于JavaScript的for循环&#xff0c;可以用于遍历一组数据&#xff1b; 二、v-for基本使用 &#xff0…

4.17-4.18学习总结

MD5 MD5: 1、压缩性 2、容易计算 3、抗修改性 4、弱抗碰撞 5、强抗碰撞 为什么需要MD5&#xff1f; 存储一些敏感信息的时候&#xff0c;如果不进行加密会出现安全问题。 例如&#xff1a;系统登录的密码&#xff0c;如果数据库中的密码采用明文&#xff0c;一旦数据库泄…

面了十几家公司测试岗,我终于悟了,面试无非就是这些题

测试岗的面试其实都是大同小异的&#xff0c;这里我收集整理了185道高频面试题&#xff0c;希望对在找工作或者准备跳槽的各位小伙伴有所帮助&#xff01; 一. 测试基础 1.如何制定测试计划 参考答案&#xff1a; 测试计划包括测试目标、测试范围、测试环境的说明、测试类型…

vue nextTick原理详解

vue nextTick Vue.nextTick() 是一个方法&#xff0c;用于在下次 DOM 更新循环结束之后执行延迟回调。它的实现原理是利用浏览器的异步任务队列机制&#xff0c;在 tick 时刻将回调函数放入队列中等待执行。在实现上&#xff0c;nextTick 方法会根据当前环境选择不同的底层实现…

DCQCN学习

主要思想 发送端的拥塞控制主要有两种形式&#xff0c;一种是基于发送窗口的&#xff0c;另一种是基于rate的 DCQCN是一种基于rate的CC&#xff0c;并主要由ECN机制实现 初始设置sending rate为max line rate 接下来CC主要分为三个部分 CP(Congestion Point) 交换机 出端…