- 博客(18)
- 收藏
- 关注
原创 数据结构-18(邻接表及广度优先遍历)
广度优先搜索遍历类似于树的按层次遍历,对于用邻接表做存储结构的图,从某个给定 顶点出发的图的遍历得到的访问结点顶点次序,随建立的邻接表的不同而可能不同。(2)初始化(3)判断队列中是否有空间(4)添加结点(5)删除结点(6)构建邻接表(7)打印(8)广度优先遍历(9)测试函数
2022-06-01 10:47:01
185
原创 数据结构-17(图的遍历)
图的遍历是指,从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这个过程称为图的遍历。(2)初始化(3)判断是否有空间(4)添加一个结点(5)删除一个结点(6)图的建立(7)初始化(8)深度优先遍历(9)广度优先遍历(10)测试函数
2022-06-01 10:36:02
156
原创 数据结构-16(N皇后问题)
N 皇后问题源自国际象棋,所有棋子中权力最大的称为皇后,它可以直着走、横着走、斜着走(沿 45 度角),可以攻击移动途中遇到的任何棋子。N 皇后问题的具体内容是:如何将 N 个皇后摆放在 N*N 的棋盘中,使它们无法相互攻击。(1)确认有无位置bool place(int* paraSolution, int paraT){ int j; for (j = 1; j < paraT; j ++){ if ((abs(paraT - j) == abs(paraSol
2022-05-29 15:58:19
256
原创 数据结构-14(二叉树)
二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分。二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个节点。(1)建立队列及二叉树节...
2022-05-24 18:49:44
263
原创 数据结构-13(压缩矩阵的转置)
对于一个n*m的矩阵,我们一般会想到开一个n*m的二维数组来存储,这样计算操作都很方便模拟,但当一个矩阵很大时,这样对于空间的开销与浪费是很可怕的,尤其是当矩阵变成多维时。但我们往往不会在矩阵每一个位置都存有数据,很多矩阵元素其实是0,我们需要记录的只是那些非零元素,于是我们可以记录非零元素的位置与值,这样便可以大大减少空间上的浪费。(1)建立矩阵typedef struct Triple{ int i; int j; elem e;} typedef struct
2022-05-19 14:35:57
126
原创 数据结构-12(二维数组与矩阵乘法)
(1)建立二维数组及矩阵typedef struct TwoDArray{ int rows; int columns; int** elements;}typedef struct TwoDStaticArray{ int rows; int columns; int elements[ROWS][COLUMNS];}(2)初始化TwoDArrayPtr initTwoDArray(int paraRows, int paraColumns){ int i; Two
2022-05-19 14:28:14
97
原创 数据结构-11(循环队列)
为充分利用向量空间,克服"假溢出"现象的方法是:将向量空间想象为一个首尾相接的圆环,并称这种向量为循环向量。存储在其中的队列称为循环队列(Circular Queue)。循环队列是把顺序队列首尾相连,把存储队列元素的表从逻辑上看成一个环,成为循环队列。循环队列就是将队列存储空间的最后一个位置绕到第一个位置,形成逻辑上的环状空间,供队列循环使用。在循环队列结构中,当存储空间的最后一个位置已被使用而再要进入队运算时,只需要存储空间的第一个位置空闲,便可将元素加入到第一个位置,即将存储空间的第一个位置作为队尾。.
2022-05-17 00:08:55
316
1
原创 数据结构-10(链队列)
链队列与链表相似,使用链表实现的队列,具有队头指针和队尾指针,指示队列元素所在的位置。不同的是它具有对列的运算方法,存储结构和链表相同。只能队尾插入元素、在队头删除元素。是先进先出的线性表,先进入的元素出队,后进入的元素才能出队。(1)建立链队列及其结点typedef struct LinkNode{ int data; LinkNode* next;}*LinkNodePtr;typedef struct LinkQueue{ LinkNodePtr front; LinkNode
2022-05-17 00:00:58
330
1
原创 数据结构-9(栈与递归及其应用)
(1)递归的实现(核心函数)int addTo(int paraN) { int tempSum; printf("entering addTo(%d)\r\n", paraN); if (paraN <= 0) { printf(" return 0\r\n"); return 0; } else { tempSum = addTo(paraN - 1) + paraN; printf(" return %d\r\n", tempSum); return tempS
2022-05-12 00:49:14
106
转载 数据结构-8(栈的应用--表达式求值)
表达式求值是栈的一个重要的应用。例如计算器中的加减乘除的表达式计算,都会使用栈来进行求值。下面的代码只用两个栈便实现了表达式求值的功能。但由于是C++,还有很多地方不熟悉,主要还是在于观摩学习。#include <iostream>#include <cstring>#include <algorithm>#include <stack>#include <unordered_map>using namespace std;s
2022-05-10 16:54:53
263
原创 数据结构-7(栈的应用--括号匹配)
在一个表达式中含有圆括号或方括号等来表示运算的优先级,将这些括号提取出来就构成了括号序列(1)建立空栈typedef struct CharStack { int top; int data[STACK_MAX_SIZE];} (2)初始化CharStackPtr charStackInit() { CharStackPtr resultPtr = (CharStackPtr)malloc(sizeof(struct CharStack)); resultPtr-
2022-05-10 16:45:09
341
原创 数据结构-6(栈)
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。(1)typedef struct CharStack { int top; int data[STACK_MAX_SIZE]; }(2)void ou
2022-05-10 14:51:26
84
原创 数据结构-5(多项式相加)
(1)建立链表typedef struct LinkNode{ int coefficient; int exponent; struct LinkNode *next;} (2)初始化链表LinkList initLinkList(){ LinkList tempHeader = (LinkList)malloc(sizeof(struct LinkNode)); tempHeader->coefficient = 0; tempHeader->exponent
2022-05-05 17:06:36
132
1
原创 数据结构-4(静态链表)
静态链表,也是线性存储结构的一种,它兼顾了顺序表和链表的优点于一身,可以看做是顺序表和链表的升级版。使用静态链表存储数据,数据全部存储在数组中(和顺序表一样),但存储位置是随机的,数据之间"一对一"的逻辑关系通过一个整形变量(称为"游标",和指针功能类似)维持(和链表类似)。(1)建立链表typedef struct StaticLinkedNode{ char data; int next;}typedef struct StaticLinkedList{ NodePtr nod
2022-05-03 12:41:11
187
原创 数据结构-3(双链表)
双向链表是一种复杂类型的链表,它的节点包含指向序列中前一个节点和下一个节点的指针。 因此,在双向链表中,节点由三部分组成:节点数据,指向下一个节点的指针(next指针),指向前一个节点的指针(prev指针)。//原文出自【易百教程】,商业转载请联系作者获得授权,非商业转载请保留原文链接:https://www.yiibai.com/data_structure/doubly-linked-list.html(1)建立链表typedef struct DoubleLinkedNode{ char d
2022-05-03 12:29:58
541
原创 数据结构-2(单链表)
单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) +指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。(1)初始化链表LinkList initLinkList(){ NodePtr tempHeader = (NodePtr)malloc(sizeof(LNode)); tempHeader->data = '\0'; tempHeader-&.
2022-04-28 13:06:40
137
原创 数据结构-1(顺序表)
本程序的功能是初步构建学生的信息管理录入系统,可以添加、存储、显示输入的学生信息,也可以删除学生信息。(PS:菜鸟入门)#include<stdio.h>#include<malloc.h>#defineLIST_MAX_LENGTH10typedefstructSequentialList{intactualLength;intdata[LIST_MAX_LENGTH];}*SequentialListPtr;//调......
2022-04-25 19:41:37
771
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人