- 博客(22)
- 收藏
- 关注
原创 LeetCode 算法基础 Day01
题目1描述:在排序数组中查找元素的第一个和最后一个位置给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?初始解法class Solution {public: vector<int> searchRange(vector<int>& nums, int
2021-08-03 00:13:56 134
原创 数据结构基础之二叉排序树的应用
设计算法以构造有n个元素(下标范围从1到n)的二分查找判定树void bstFromArr(btNode *&T, elementType A[],int low, int high){ int mid; //先应用二叉查找的算法 if (low < high){ mid = (low + high) / 2; T = new btNode; T->data = A[mid]; T->lChild = NULL; T->rChild
2020-06-13 11:52:47 1140
原创 数据结构基础之查找(二叉排序树)
文章目录二叉排序树的定义二叉排序树的查找非递归查找递归查找二叉排序树的插入插入结点的非递归算法插入结点的递归算法二叉排序树的构建二叉排序树的定义若左子树不空,二叉树的根结点的值小于其左子树的所有结点的值若右子树不空,二叉树的根结点的值大于或等于其右子树的所有结点的值其所有的左右子树均为二叉排序树二叉排序树的查找非递归查找btNode* searchNR(btNode* T, elementType x){ while (T){//如果根结点指针不为空 if (x < T-&
2020-06-13 11:06:10 2344
原创 数据结构基础之查找(顺序表查找)
文章目录简单顺序查找线性表查找相关结构、参数定义从左往右顺序查找从右往左顺序查找带监视哨从右往左顺序查找带监视哨从左往右查找二分查找非递归的二分查找递归的二分查找简单顺序查找线性表查找相关结构、参数定义#define MaxLen 100typedef int keyType; //定义关键字类型//定义查找表元素类型typedef struct elementType{ keyType key; //定义关键字 //元素的其它字段} elementType;in
2020-06-12 23:12:52 320
原创 数据结构基础之队列的应用--杨辉三角
用队列打印杨辉三角//打印杨辉三角void YangHuiTriangle(int n){ //n为杨辉三角的行数 seqQueue Q; initialQueue(&Q); int s1,s2,x; cout<<1<<endl; //输出第一行的“1” enQueue(&Q,1); //第一行的"1"入队 for(int i=2; i<=n; i++) //从第2行数字开始,循环处理 { s1=0; //存放
2020-06-12 17:58:27 902
原创 数据结构基础之双链表的应用
设计算法以判断带头结点的双循环链表 L 是否是对称的,即从前往后和从后往前的 输出序列是相同的。若对称,返回 true,否则返回 falsebool SymmetricalDLList(dnode *L) { dnode *p, *r; p = L->next; r = L->prior; while (p!=r && p->next != r){ if (p->data == r->data){ p = p->next; r
2020-06-11 22:51:55 523
原创 数据结构基础之单链表的应用(二)
设计算法将两个递增有序的带头结点的单链表 A、B 合并为一个递增有序的带头结 点的单链表,并要求算法的时间复杂度为两个表长之和的数量级//没有对元素结点的删除操作,而是通过R指针将A和B的结点连接起来void Merge_LinkList1(node* La,node *Lb){ node *pa, *pb, R; pa = La->next; pb = Lb->next; R = La; while (pa!=NULL && pb!=NULL){ if
2020-06-11 22:12:07 785
原创 数据结构基础之顺序表的应用(三)
//若递增有序顺序表 A、B 分别表示一个集合,设计算法求解 A=A交B,并分析其时间性能void InterSet(seqList *&A, seqList*& B){ int ia = 0, ib = 0; int i = -1; while (ia < A->listLen && B->listLen){ if (A->data[ia] == B->data[ib]){ if (ia != i+1) A->
2020-06-11 21:22:59 518
原创 数据结构基础之顺序表的应用(二)
//删除顺序表中的重复元素void DeleteRepeatData(seqList*& L){ int i, j; if (L->listLen == 0){ cout << "当前顺序表为空。" << endl; return; } if (L->listLen == 1){ cout << "当前顺序表只有一个元素。" << endl; return; } i = 0; while (i &
2020-06-11 18:30:54 164
原创 数据结构基础之双循环链表--双链表
双链表的结点结构typedef struct DLNode { elementType data; // 数据域 struct DLNode *prior ; // 前向指针域 struct DLNode *next; // 后向指针域} dNode;双循环链表的初始化void initialList(dNode*& L){ L = new node; L->prior = L; L->next = L;}双链表
2020-06-11 10:07:11 219
原创 数据结构基础之带尾结点的单循环链表
带尾结点指针的单循环链表结构//带尾结点的单循环链表//可以不要头指针typedef int elementType;typedef struct LinkedList{ elementType data; struct LinkedList* next;}node;带尾结点指针的单循环链表初始化//R是尾结点 void initialList(node *&R){ R = new node;//申请头结点 R->next = R; } 求表长度//求表
2020-06-11 09:18:05 2591
原创 数据结构基础之单链表的应用(一)
设计算法以判断链表 L 中的元素是否是递增的,若递增,则返回 TRUE,否 则返回 FALSEbool Judge(node*& L){ node *p = L->next; //如果链表中没有元素也属于递增 if (p == NULL) return true; //如果链表中除了最后一个元素之外的元素的值都小于下一个元素的值或者链表中只有一个元素,则返回true,否则返回false while (p->next != NULL){ if (p->dat.
2020-06-10 23:21:10 772
原创 数据结构基础之顺序表的应用(一)
现有 2 个集合 A 和 B,求一个新集合 C=A∪B,3 个集合都用顺序表表示。 比如 A={2, 4, 10, 5, 9},B={1, 4, 6, 8},则 C={2, 4, 10, 5, 9, 1, 6, 8}void listMerge(seqList *&A, seqList *&B, seqList*& C){ int ia, ib, ic = 0; //先将集合A中的元素全部复制到C表中 for (ia=0; ia<A->listLen; ia+.
2020-06-10 22:29:14 346
原创 数据结构基础之单链表
单链表的结构//带头结点的单链表 typedef int elementType;typedef struct slNode{ elementType data; struct slNode *next;}node;单链表的初始化//初始化链表void initialList(node *&L){ L = new node; L->next = NULL;} 求单链表的长度//求链表长度的实现int listLength(node *L){ int len
2020-06-10 18:31:25 143
原创 数据结构基础之顺序表
顺序表的储存结构#define MAXLEN 100typedef int elementType; typedef struct sList{ elementType data[MAXLEN];//存储元素 int listLen;//表长}seqList;顺序表的初始化//顺序表的初始化void initialList(seqList *&L){ L->listLen = 0;}顺序表的按序号查询元素//按序号查找元素void getElement(seq
2020-06-10 12:27:06 151
原创 数据结构基础之二叉链表的创建
二叉链表创建有三种方法,1、用户键盘输入创建 2、根据二叉树的顺序表·来·创建二叉链表 3、读取文件来创建二叉链表
2020-05-23 23:27:21 3894
原创 数据结构初学之队列--用不带头结点的单链表实现链队列
前言:用不带头结点的单链表来实现链队列要比带头结点的单链表实现复杂一点,主要在初始化队列,入队时有一些区别。特别是在入队时,要根据入队的是不是第一个元素来进行讨论。1、初始化队列,使队头指针front和队尾指针rear指向空2、判断队空,Q.front == NULL时为空,不能用Q.front == Q.rear来判断,否则在入队操作时, 会导致Q.front == Q.rear这个条件始终...
2020-05-07 19:21:18 3376 3
原创 数据结构初学之循环队列补充
求循环队列的长度分析:1、当队尾指针rear指向的结点的位置下标大于队头指针front指向的结点的位置下标时(即队尾指针在队头指针的后面时), 队列的长度为len = rear - front;即len = (rear - front + MAXLEN) % MAXLEN;2、当队尾指针rear指向的结点的位置下标小于队头指针front指向的结点的位置下标时(即队尾指针在队头指针的前面时)...
2020-05-06 00:09:02 283
原创 数据结构初学之栈的应用--判断一个数学表达式的括号是否匹配
对于一个合法的数学表达式来说,其中的各大小括号"{", “}”, “[”. “]”, “(”, ")"应该是相互匹配的,输入算法对以字符串形式读入的表达式S,判断其中的各括号是否是匹配的。ps: 判断一个数学表达式的括号是否匹配,不仅要判断其左右大小括号的数量是否对应相等,还要判断括号的匹配次序是否正确。算法思想: 顺序扫描算数表达式(表现为一个字符串),当遇到三种类型的左括号时候,执行进栈操...
2020-05-05 09:14:03 2015 1
原创 数据结构初学之栈的应用--进制转换
利用顺序栈将10进制数转换为16进制数进制转换的方法:循环相除取余数。对于10进制转换为16进制,设10进制数为n, 循环除以16,每次取出余数并保存。注意,由于16进制数可能会包含字母,因此要余数先转化为字符型,再存入栈中。// 十进制转换为十六进制void change10To16(int x) { seqStack S;//定义一个栈 initialStack(S);...
2020-05-05 08:52:06 1519
原创 数据结构初学之队列基础
@[TOC]队列#队列的定义##队列的基本概念#队列的基本运算##循环顺序队列##链队列一、队列的定义1、队列的基本概念队列是只能在一端插入,另一端删除的线性表。允许删除的一端叫做队头,允许插入的一端叫做队尾。没有元素的队列叫做空队列。队列的插入操作叫做“入队”, 队列的删除操作叫做“出队”。二、 队列的基本运算1、循环队列ps: 循环队列之前应该先介绍顺序队列,但是一般的...
2020-05-05 00:40:58 294
原创 数据结构初学之栈基础
@[TOC]目录#栈的定义##栈的基本概念#栈的运算##顺序栈##链栈#一、栈的定义##栈的基本概念1、栈是只能在一端进行插入和删除的线性表,进行插入和删除的一端称作“栈顶”,另一端称为“栈底”。没有元素的栈称为“空栈”。2、栈的插入操作称为“入栈”, 栈的删除操作称为“出栈”。3、特性:先进后出。#二、栈的基本运算##顺序栈//顺序栈//储存结构#define MA...
2020-05-04 23:20:49 651
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人