数据结构算法中用到的存储结构
来源:互联网 发布:xp无法连接网络打印机 编辑:程序博客网 时间:2024/05/18 00:33
任何算法都是用于数据处理的,算法设计总是基于某种存储结构。很多人都会遇到这样的一个问题:拿到一个算法设计题只知道其过程,可以用文字来描述,但不会写出正确的代码。主要的原因有两方面:
1、对存储结构不熟悉,比如不熟悉较为复杂的图的邻接矩阵存储结构和邻接表存储结构;
2、对计算机语言不熟悉,比如C/C++语言的不熟练使用
基本概念
- 数据在CS中是指所有能被输入到计算机中并能被计算机处理的符号的总称。
- 数据元素是表示数据的基本单位;数据项是数据的最小单位,数据元素有若干个数据项组成。比如上图中一个学生记录就是一个数据元素,它由 学号、姓名、性别 3个数据项组成。
- 数据对象是性质相同的数据元素的集合,是数据的一个子集。比如 大写字母就是一个数据对象,大写字母数据对象是集合{‘A’, ‘B’, …, ‘Z’}。在数据结构中数据通常指的是数据对象。
- 数据结构是指相互之间存在某种关系的数据元素的集合,数据结构中的关系主要是指相邻关系(一对一,一对多,多对多)。
- 数据结构包含三方面内容:逻辑结构、存储结构(物理结构)和对数据的运算。逻辑结构:线性结构(一对一),树形结构(一对多),图形结构(多对多)。
- 存储结构(数据的逻辑结构在计算机中的存储形式):顺序存储,链式存储,索引存储,散列存储。
以下给出常用的存储结构:
顺序表
// 顺序表(借助数组实现)typedef struct { ElemType data[MaxSize]; //存放顺序表中的元素 int length; //存放顺序表的长度}SqList;//单链表typedef struct LNode { //定义节点 ElemType data; //数据域 struct LNode *next; //指针域}LinkList; //声明单链表节点的类型//双链表typedef struct DLinkList { ElemType data; //数据域 struct DLinkList *prior, //prior指向前驱节点 struct DLinkList *next; , //next指向后继节点}DLinkList;//栈----只能在一端进行插入或删除操作的线性表(借助数组实现),其存储结构:顺序栈,链栈//顺序栈typedef struct { ElemType data[MaxSize]; int top; //栈顶指针,初始化 top = -1;}SqStack;//链栈(借助带头结点的单链表来作为链栈,即只能在一端进行插入和删除)typedef struct LinkNode { ElemType data; struct LinkNode *next;}LinkStack;//队列----顺序队列、链队列//顺序队列typedef struct { ElemType data; int front, rear; //front指向队头,rear指向队尾}SqQueue;//链队列typedef struct qnode { ElemType data; struct qnode *next;}QNode;typedef struct { QNode *front; //队头指针 QNode *rear; //队尾指针}LinkQueue;
树(二叉树)
//顺序存储结构typedef ElemType SBTree[MaxSize];//孩子兄弟链typedef struct node { ElemType data; struct node *lchild; struct node *rchild;}BTNode;
图
/*图的邻接矩阵*/#define MAXV 100 //最大顶点个数typedef char ElemType;typedef struct { int no; //顶点编号 ElemType info; //顶点其他信息}VertexType; //顶点类型typedef struct { int edges[MAXV][MAXV]; //邻接矩阵 int n, e; //顶点数,边数 VertexType vexs[MAXV]; //存放顶点信息}MGraph; //声明图的类型
/*图的邻接表*/typedef char ElemType;typedef int InfoType;typedef struct ArcNode { //定义边表节点 int adjvex; //该边的终点位置 struct ArcNode *nextarc; //指向下一条边的指针 InfoType info; //边相关信息,带权图可存放权值}ArcNode; //声明边表节点类型typedef struct VNode { ElemType data; //邻接表头节点类型 ArcNode *firstarc; //指向第一条边}VNode, AdjList[MAXV]; //声明表头节点类型typedef struct { AdjList adjlist; //邻接表 int n, e; //顶点数,边数}AGraph; //声明图的类型
数据结构与算法是程序员的内功,我的弱项,需要勤加练习,付出百倍努力。大牛与你的差距在于背后付出了多少汗水。凡事都需要一个过程,你现在觉得难的,将来它会像1 + 1 = 2 一样简单。
0 0
- 数据结构算法中用到的存储结构
- 数据结构笔记--实际软件开发中用到的最多的数据结构和算法
- 数据结构与算法4:树的基本存储结构
- 数据结构与算法5:图的存储结构
- 树的存储结构 – 数据结构和算法41
- 树的存储结构2 – 数据结构和算法42
- 二叉树的存储结构 – 数据结构和算法45
- 【数据结构】算法7.3 图的存储结构-十字链表
- 《数据结构和算法》之栈的链式存储结构
- 《数据结构和算法》之队列的顺序存储结构
- 数据结构-二叉树的存储结构和遍历算法(四)
- Linux platform中用到的数据结构分析
- 学习数据结构中用到的代码
- 开发中用到的视频存储
- 数据结构---->图的存储结构
- 数据结构的链式存储结构
- 数据结构 - 图的存储结构
- 数据结构-树的存储结构
- Spring Boot 菜鸟教程 19 后台验证 Hibernate Validation
- 【Basic Code】转义符 小结
- git常用功能及设置
- Linux网络编程之SOCKET文件传输
- [POJ1320] Street Number
- 数据结构算法中用到的存储结构
- 常用数学算式。
- 【C++】 C++标准模板库(十二) 迭代器和STL
- Proguard的Keep使用方法
- 你很烫吗?我很烫——关于栈区和静态存储区的思考
- 初探腾讯Unity手游热更新方案xlua
- eclipse配置环境变量问题
- jquery和prototype.js的区别
- 【JVM学习系列】 JVM内部架构