初识数据结构

数据结构顾名思义就是一堆数据的组织方式,以方便后续的存取和操作,且好的算法离不开高效管理数据的方法。

数据结构的三要素:

1. 数据集合。通过数据对象的本体(如数组和结构体)保存数据

2. 操作。对数据集合的操作,如插入、存取、查找、以及修改等

3. 规则。保证数据集合按照一定规矩来操作、管理和存取,如以何种顺序存取数据元素

在此介绍几种线性数据结构:

一、栈(Stack)

说明:用于临时保存数据,且按照后入先出的规则管理数据集合,在许多递归式的数学解题中都可应用栈来实现。

操作:

1. push(x) : 在栈顶部添加元素

2. pop() : 从栈顶取数据

3. isEmpty() : 栈是否为空

4. isFull() : 栈是否已满

用数组实现栈的代码:

 1 init()
 2     top = 0
 3
 4 isEmpty()
 5     return top == 0
 6
 7 isFull()
 8     return top >= Max -1
 9
10 push(x)
11     if isFull()
12         error(overwrite)
13     S[++top] = x
14
15 pop()
16     if isEmpty()
17         error(overread)
18     return S[top--]

二、队列(Queue)

说明:队列是一个等待处理的数据行列,当希望按照数据抵达的先后顺序来处理数据时会用到,其按照先入先出的规则管理数据。在许多消息队列或消息系统中都有所应用,往往作为两个系统或进程间的数据缓冲区,可实现较好的用户体验。

操作:

1. enqueue(x) : 在队列末尾添加元素

2. dequeue() : 从队头中取出元素

3. isEmpty() : 队列是否空

4. isFull() : 队列是否满

队列可区分为线形和环形,但是线形的队列容易导致部分空间被浪费(因每次从队头中取元素使得head加1,若要防止这一情况需让head时常保持在0,即每次执行完dequeue后应让数据整体向数组开头移动,但这将增加复杂度),而环形队列能有效避免该问题。

环形缓冲区由一维数组构成,指示队列范围的head和tail指针在超出数组范围时重新从数组开头开始循环,即如果指针加1之后超出了数组范围,就重新置为0,其代码实现如下:

 1 init()
 2     head = tail = 0
 3
 4 isEmpty()
 5     return head == tail
 6
 7 isFull()
 8     return head == (tail + 1) % MAX
 9
10 enqueue(x)
11     if isFull()
12         error(overwrite)
13     Q[tail] = x
14     if tail + 1 = MAX
15         tail = 0
16     else
17         tail++
18
19 dequeue()
20     if isEmpty()
21         error(overread)
22     x = Q[head]
23     if head + 1 = MAX
24         head = 0
25     else
26         head++
27     return x

三、链表(List)

链表主要由结构体来实现,在C++中即由多个节点(node)来构成,每个节点由指针域和数据域组成,能够高效的在链表特定位置进行插入或删除操作,同时避免内存空间浪费(需要多少就申请多少)。此外,链表基本数据结构是实现高等数据结构的基础。

链表有许多不同的形式,如单向链表、双向链表、环形链表以及多个前驱或后驱节点的链表。在此仅介绍双向链表

时间: 2024-08-26 12:14:32

初识数据结构的相关文章

《数据结构(C语言版)》学习——day1,初识数据结构

1. 什么是数据结构 一般而言,使用计算机解决一个具体的问题时,大致需要经过以下几个步骤: ① 从具体的问题中抽象出一个适当的数学模型: ② 设计一个求解该数学模型的算法: ③ 编写程序,进行测试.调整,直至得到最终的问题解答. 对实际问题建立数学模型的实质是:分析问题,并从中提取操作的对象,并找出这些对象间含有的关系,然后使用数学的语言加以描述. 数据结构(data structure)可以定义为:相互之间存在一种或多种特定关系的数据元素的集合. 在任何问题中,数据元素都不是孤立存在的,而是存

Python学习日志之Python数据结构初识

Python数据结构初识: 一.Python数据结构概述 1.何为数据结构 在程序中,同样的一个或几个数据组织起来,可以有不同的组织方式,也就是不同的存储方式,不同的组织方式就是不同的结构,我们把这些数据组织在一起的结构就叫做数据结构 例如: 有一串字符串:"abc",我们将它重新组织一下,比如通过list()函数将"abc"变成["a","b","c"],那么这个时候数据发生了重组,重组之后的结构就发生了

数据结构与算法实践 之 二分查找初识

今天起,我要对数据结构和基本的算法进行一些简单的复习,并在复习的基础上对其进行深入的挖掘.这篇文章先对二分查找进行一个简要的复习,在之后的文章中会对其进行深入的学习. 二分查找又叫折半查找,是最基本的几种查找算法之一.简单的看,二分法查找主要应用于在一个有序数列中进行元素的查找,其基本思路是,先用我们要查找的元素与这个有序数列中的中间位置的元素进行比较(在此我们姑且称这个元素为"中间位置元素"吧,至于这个元素怎么求我在后面会详细说明),如果相等,则返回这个"中间位置元素&qu

开启基本数据结构和算法之路--初识Graphviz

在我的Linux刀耕开荒阶段,就想开始重拾C,利用C实现常用的基本数据结构和算法,而数据结构和算法的掌握的熟练程度正是程序的初学者与职业程序员的分水岭. 那么怎么开启这一段历程呢? 按照软件工程的思想,先从需求分析开始,用准确的共同的语言去表达需求,作出规格,到后面的设计,实现,维护. 基本数据结构和算法需求比较明朗,但提高沟通能力要用我们的语言表达出来,然后进行建模,画图分析,设计,最后到实现,优化维护. 对于画图工具,我选择Graphviz.刚开始使用Linux下的PhotoShop--GI

【数据结构与算法】二分钟初识树

一:树的定义 树是一种数据结构,由n(n>1)个有限结点组成一个有层次关系的集合.形状像一颗倒立的树而得名.分为:无序树,有序树,二叉树,满二叉树,完全二叉树,平衡二叉树(AVL),二叉查找树(二叉搜索树.BST),霍夫曼树,红黑树,B-tree(B-树或者B树),B+树,B*树等. 节点结构体(C/C++)表示为: typedef struct treeNode{    void *val;                  //数据项,任意类型    struct treeNode *lef

ES6初识-(冲突)数据结构

Set的用法 元素不能重复--唯一性 WeakSet key值只能是对象 没有clear属性 Map let map=new Map([['a',123],['b',456]]);; WeakMap let o={}; weakmap.set(o,123); console.log(weakmap.get(o)); Map与Array的对比

初识Python,望君多多关照

在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的

C#初识

初识C#程序结构 一.编写第一个C#程序.注释: 1.编写程序 static void Main(string[] args)//在Mian方法下编写代码输出数据 { Console.WriteLine("Hello World!");//输出"Hello World!" Console.ReadLine();//暂停 } 2.注释 C#程序结构分为注释.命名空间.类.Main方法.标示符及关键字.语句. 注释:行注释都是以"//"开头 段注释引

Java基础学习——数组初识(1)

Java基础学习--数组初识(1) 1什么是数组 Java中常见的一种数据结构就是数组,数组可以分为一维数组.二维数组和多维数组. 数组是由一组相同的变量组成的数据类型,数组中每个元素具有相同的数据类型,数组中的每个元素都可以用一个统一的数组名和下标来确定. 2 数组的使用 数组的一般使用步骤: 声明数组 分配内存给该数组 下面是一维数组为例: 数据类型  数组名 []: 数组名 = new 数据类型 [数据个数]: 2.1一维数组的声明与赋值 1.数组的声明 int  num [];