数据结构
文章平均质量分 51
以严薇敏教程为底的数据结构专栏
Soviet:
在校
展开
-
数据结构——KMP算法详解(严蔚敏书版)
什么是KMP算法KMP算法是一种用于字符串匹配的算法,其名字的由来是三位发现者的首字母加起来,没有什么特殊含义。这种算法总的来说就是在一个文本的指定位置之后找到一个需要的子串并返回它的位置,如果不存在指定的子串,则返回0.在KMP算法被发现之前,我们通用的算法一般都是建立双循环,所以时间复杂度一般在O(m*n).m和n是分别为文本串和子串的长度。而如果使用KMP算法,则可以将时间复杂度降低到O(n+m);既然这种算法如此快,那么我们就来看看其原理以及如何实现吧。KMP算法的原理以及实现这里我们假设文本原创 2022-05-26 15:32:50 · 1825 阅读 · 1 评论 -
数据结构07-循环队列
汉诺塔:#include<iostream>using namespace std;int cnt = 0;void move(int n,char a,char b){ cout << ++cnt << " move disk " << n << " from " << a << " to " << b << endl;}void hanoi(int n,char a,char原创 2022-05-12 15:35:38 · 248 阅读 · 0 评论 -
数据结构06-链表队列
int op_cmp(char c1, char c2) //优先级c1>c2返回1,小于返回-1,等于返回0{ switch (c1) { case '+':switch (c2) { case '+':return 1; case '-':return 1; case '*':return -1; case '/':return -1; case'(':return -1; case ')':return -1; case '#':return 1; } case原创 2022-05-10 22:03:41 · 207 阅读 · 0 评论 -
数据结构06——栈的应用,括号匹配
栈本身上理解起来并不难,但栈之所以应用这么广泛,是因为其先进后出的思想在计算机各个领域都有所影响,这里我们来看它的一个应用——括号匹配。括号匹配的应用十分广泛,从Word的自动纠错,到我们更加熟悉的编译器检查语法,这些都需要用到括号匹配,那我们究竟如何判断一串字符串中的括号到底对不对呢,这里我们就需要用到栈的思想。照例,我们先上代码#include<iostream>#include<string>using namespace std;#define MaxSize 1原创 2022-05-10 19:50:26 · 215 阅读 · 0 评论 -
数据结构06-栈
栈和队列是两种我们应用非常广的数据机构,这两个都是线性表的一种,今天我们主要来谈谈栈。栈的主要代码:#include<iostream>using namespace std;#define MaxSize 10//初始化,压栈,入栈typedef struct Stack { int top; int data[MaxSize];}Stack;Stack* Stack_Init(){ Stack* temp = new Stack; if (!temp) {原创 2022-05-10 19:02:45 · 305 阅读 · 0 评论 -
数据结构05-多项式相加
先上代码再解释#include<iostream>using namespace std;//链表的应用-进行多项式的相加//创建一个多项式节点:typedef struct Node { int coeff; int exp; struct Node* next;}Poly, * Polyptr;//有以下几个函数//初始化,打印,测试,添加,相加。Polyptr Poly_Init(){ Polyptr temp = new Poly; if (!tem原创 2022-05-05 19:01:48 · 2403 阅读 · 3 评论 -
数据结构04-静态链表
先上代码#include<iostream>#define MAX_SIZE 5using namespace std;typedef struct Node { char data; int next;}*pNode;typedef struct List { pNode nodes; int* used;}*pList;pList List_Init(){ pList temp = new List; if (!temp) { cout <<原创 2022-05-03 19:07:20 · 325 阅读 · 1 评论 -
数据结构03-双向链表
双向链表的代码#include<iostream>using namespace std;/** * @brief 定义一个具有前驱和后继的结构体作为双链表的节点 */typedef struct DoubleLinkedList { int data; struct DoubleLinkedList* next; struct DoubleLinkedList* pre;}DualLinkedList;/** * @brief 定义一个操作双链表节点的操作原创 2022-05-02 08:57:44 · 520 阅读 · 1 评论 -
数据结构02——单链表
先上代码,再进行解释#include<iostream>using namespace std;/** * @brief 创建一个结点的结构体,包含指针域和数据域 */typedef struct LinkNode { int data; struct LinkNode* next;}LinkNode;/** * @brief 创建一个类,类中包含对链表的操作以及测试 */class LinkNode_Oper {public:/** * @bri原创 2022-04-28 12:54:55 · 172 阅读 · 0 评论 -
数据结构01-线性表
#include<iostream>using namespace std;#define LIST_MAX_LENGTH 10/** * @brief 建立一个线性表类,并提供操作线性表的接口函数 */class SequentialList{public: int size; int data[LIST_MAX_LENGTH]; /** * @brief 输出线性表的值 * @param 无 * @retval 无 */ void O.原创 2022-04-25 17:53:10 · 621 阅读 · 2 评论