对于数据结构的理解:

数据结构是定义不同的数据类型,来存储信息。或者利用这些特殊数据结构的特点来实现相应的功能。我们在使用数据结构时都必须对其进行初始化赋值。因为其结构的特殊性,所以看起来赋值、删除等操作要复杂些。不过还是有章可循的,那就是指针。只要掌握了指针的操作和数据结点的数据结构,了解数据结构的相关知识、利用数据结构来解决问题,就会变得简单。

常用的数据结构:

数组
在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称为数组。在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。
数组是最简单也是最特殊的一种数据结构。从数据储存方式来看,数组元素是连续存储。数据元素的地址定位简单,数据类型的定义没有特殊要求。而且,定义的时候必须确定元素的个数。


是只能在某一端插入和删除的特殊线性表。它按照先进后出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。

栈的数据类型:

typedef int datatype;
 #define maxsize 64
 typedef struct
 {
 datatype data[maxsize];
 int top;
 }seqstack;
 seqstack *s;



队列
一种特殊的线性表,它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列是按照“先进先出”或“后进后出”的原则组织数据的。队列中没有元素时,称为空队列。

队列的数据类型:

#define maxsize 1024
 typedef struct
 {
 datatype data[maxsize];
 int rear,front;
 }SeQueue



栈和队列是同一类数据结构,数据结点相互独立。数据结构用来表示结构体内部的数据内存被占用的情况,被用来进行数据的保护、存取等相关操作。


链表
是一种物理存储单元上非连续、非顺序的存储结构,它既可以表示线性结构,也可以用于表示非线性结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

链表的数据结构:

typedef struct node
 {
 datatype data;
 struct node *next;
 }LNode, *LinkList;
 LinkList H;



因为无论数据类型如何,其指针的数据长度都是相同的。所以,node=node ->next的操作是可以的。链表的链尾结点node ->next == NULL。


是包含n(n>0)个结点的有穷集合K,且在K中定义了一个关系N,N满足 以下条件:
(1)有且仅有一个结点 K0,他对于关系N来说没有前驱,称K0为树的根结点。简称为根(root)。  
(2)除K0外,K中的每个结点,对于关系N来说有且仅有一个前驱。
(3)K中各结点,对关系N来说可以有m个后继(m>=0)。

二叉树的二叉链表存储表示:

typedef struct BiTNode
 {
 elemtype data;
 struct BiTNode *lchild; *rchild;
 }BiTNode, *BiTree;





图是由结点的有穷集合V和边的集合E组成。其中,为了与树形结构加以区别,在图结构中常常将结点称为顶点,边是顶点的有序偶对,若两个顶点之间存在一条边,就表示这两个顶点具有相邻关系。可以和地图类比,节点就是地点。两个节点之间可以有两个方向,比如:a->b、b->a。一个节点也可以指向多个节点,比如:a->b、a->c。

C语言数据结构与算法都需要结构体吗 c语言数据结构是干嘛的_指针


在计算机科学中,堆是一种特殊的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。

堆是一种特殊类型的二叉树,具有以下两个性质:

(1) 每个节点的值大于等于其每个子节点的值;

(2) 该树完全平衡,最后一层的叶子都处于最左侧的位置。


散列表
若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表

给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

散列表的英文叫“Hash Table”,我们平时也叫它“哈希表”或者“Hash 表”,散列表用的就是数组支持按照下标随机访问的时候,时间复杂度是 O(1) 的特性。我们通过散列函数把元素的键值映射为下标,然后将数据存储在数组中对应下标的位置,所以散列表其实就是数组的一种扩展,由数组演化而来。如果没有数组,就没有散列表。(感觉类似于动态数组)

链接:https://www.jianshu.com/p/4630a06c5da0

C语言数据结构与算法都需要结构体吗 c语言数据结构是干嘛的_栈_02