![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
平时学习到的记录在这里
二零二三.
这个作者很懒,什么都没留下…
展开
-
常见的位运算技巧
①x & (x - 1) 用于消去x最后一位的1② x & -x 取出 x的二进制表示中最低位那个1原创 2021-10-30 09:27:22 · 120 阅读 · 0 评论 -
KMP算法笔记
//自己看完y总算法基础课后的笔记#include <iostream>using namespace std;const int N = 100010, M = 1000010;int n, m;int ne[N];char s[M], p[N];/* s[ ]是模式串,即比较长的字符串。 p[ ]是模板串,即比较短的字符串。 两个串都是从下标为1开始的 每次比较是 s[i]和p[j+1]进行比较,因此j代表已经匹配的字串的最后一个字符的下原创 2021-09-25 11:40:17 · 80 阅读 · 0 评论 -
单链表相关的基本操作
头文件#pragma once#include<stdio.h>#include<stdlib.h>#define OK 1#define OVERFLOW -2#define TRUE 1#define FLASE 0#define ERROR 0typedef int ElemType;typedef int Status;源文件#include"c1.h"typedef struct LNode { ElemType data; struct原创 2020-11-27 12:46:21 · 159 阅读 · 1 评论 -
最小生成树prim普里姆算法
**头文件#pragma once#include<stdio.h>#include<stdlib.h>#define OVERFLOW -2#define INFINITY 1000 //无穷大#define MN 6 //图的顶点数目typedef char vertexType;typedef int arcType;源代码#include"c1.h"typedef struct { vertexType vexs[MN]; arcType arc原创 2020-11-26 23:22:18 · 190 阅读 · 0 评论 -
二叉树的创建(先序),先序中序后序递归输出,求叶子结点数,总结点数,树的高度和交换左右子树
头文件(c1.h)#pragma once#include<stdio.h>#include<stdlib.h>#define MAXSIZE 100#define OVERFLOW -2typedef char elemtype;源代码#include"c1.h"typedef struct BiNode { elemtype data; struct BiNode* lchild, * rchild;}BINode , *BiTree;void原创 2020-11-24 12:50:44 · 1657 阅读 · 0 评论 -
判断该字符序列是不是回文,3.31
头文件c1.h#pragma once#pragma once#define TURE 1#define FALSE 0#define OK 1#define ERROR 0#define STACK_INIT_SIZE 10#define STACKINCEEMENT 2#define OVERFLOW -2#define MAXQSIZE 10#include <malloc.h>#include<stdio.h>#include<iostream原创 2020-10-12 07:36:52 · 215 阅读 · 0 评论 -
循环队列的基本操作(C)
和顺序栈相类似,在队列的顺序存储结构中,除了用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,还需要辐射两个指针front和rear分别指示队列头元素和尾元素的位置初始化建空队列时令front= rear=0,每当插入新的队列尾元素时,尾指针增一,同样每当删除队列头元素时,头指针减一,经过一系列插入删除操作后,会产生图(4)的情况,此时明显已经不能再从队尾插入新的元素了,但是可以看到有很多的空间空着呢,不能利用,这时一个较巧妙的方法是将谁许队列臆造为一个环状空间。可以看到图(a)和图(d1原创 2020-08-01 18:53:33 · 2265 阅读 · 4 评论 -
行编辑程序(栈c)
输入一行打印一行#include <stdio.h>#include <stdlib.h>#define STACK_INIT_SIZE 100#define STACKINCREMENT 10#define OVERFLOW -2#define OK 1#define ERROR 0typedef char SElemType;//栈结构体typedef struct { SElemType* base; SElemType* top;原创 2020-07-23 11:42:31 · 606 阅读 · 0 评论 -
括号匹配的检验(栈)
#include<iostream>using namespace std;#include<stdio.h>#include<stdlib.h>#define TURE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW 2typedef int Status;typedef char SElemType;//栈的顺序存储表示#define STACK_INIT_SIZE 10.原创 2020-07-22 16:00:10 · 3046 阅读 · 1 评论 -
删除并释放所有值大于mink和且小于maxk的元素
已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试设计一个高效的算法,删除表中所有值大于mink和且小于maxk的元素(若表中存在这样的元素),同时释放被删结点空间(注意:mink和maxk是给定的两个参变量。它们的值可以和表中的元素相同,也可以不同)typedef struct Lnode { elemtype date; struct Lnode *next; }Lnode,*linklist;Status Dlelte_Between(Linklist &L原创 2020-07-20 14:33:28 · 1259 阅读 · 0 评论 -
单链表逆置(头插法和就地逆置)
试写一算法,对单链表就地逆置第一个版本官方答案:以单链表作存储结构进行就地逆置的正确做法应该是:将原链表中的头结点和第一个元素节点断开(令其指针域为空),先构成一个新的空表,然后将原链表中各结点,从第一个结点起,依次插入这个新表的头部(即令每个插入的结点成为新的第一个元素结点)这些笔记根据小破站上的一位up主(folk_and_star_me)的视频写的,如果大家觉得笔记看不好可以去在b站上看那个视频。第二个版本可以按照第一个版本的方法 ,用画图帮助理解。...原创 2020-07-20 22:01:11 · 1479 阅读 · 1 评论 -
将两个递增的单链表合并为一个递减的单链表
问题描述:假设有两个按元素值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。问题解答:算法思想:两个链表已经按元素值递增次序排序,将其合并时,均从第一个结点起进行比较,将小的结点链入链表中,同时后移工作指针。该问题要求结果链表按元素值递减次序排列,故新链表的建立应该釆用头插法。比较结束后,可能会有一个链表非空,此时用头插法将剩下的结点依次插入新链表中即可。void MergeList(Link转载 2020-07-21 11:19:24 · 7777 阅读 · 2 评论