![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
Pink&Sakura
C、C++、Java、前端
展开
-
java 求数组中心下标
数组的中心下标:数组的一个下标,其左侧所有元素之和等于右侧元素之和如果不存在中心下标返回-1,如果同时存在多个中心下标,返回最左边的中心下标例如:arr=[1,7,3,6,5,6]算法步骤:用类似双指针的方法,先求出数组所有元素之和,sumfor循环从第一个元素开始,定义一个total(此时索引所在的值加上这个索引左边所有的值)i=0 total=arr[0] sum!=total i++ sum=sum-arr[0]i=1 total=arr[0]+arr[1] sum!=原创 2022-03-18 22:55:41 · 1788 阅读 · 0 评论 -
双指针算法,删除排序数组中的重复项
要求原地删除重复出现的元素,返回删除后数组的新长度,不能使用额外的数组空间例如数组:arr=[0,1,2,2,3,3,4,]利用双指针算法:定义指针 i (慢指针) j(快指针)第一步:i j分别指向arr[0]和arr[1] 即:i->0; j->1 arr[i]!=arr[j] i++;j++第二步:i j分别指向arr[1]和arr[2] 即:i->1; j->2 arr[i]!=arr[j] i++;j++第三步:i j分别指向arr[2]和arr[3]原创 2022-03-18 21:46:59 · 435 阅读 · 0 评论 -
八种排序算法
排序算法的稳定性排序算法的世间复杂度简单说就是程序循环执行的总次数,算法的时间复杂度是一个函数,定量的描述了算法运行的时间用符号O表示,即O(f(n));常见八种排序:1、直接排序代码:#include<iostream>using namespace std;void InsertSort(int* a, int length){ int i = 0, j = 0, temp = 0; for (i = 1; i < l...原创 2021-12-12 00:31:30 · 1568 阅读 · 4 评论 -
一个程序详细介绍向量vector的使用方法
#include<iostream>#include<vector>#include<algorithm>#include<assert.h>#include<windows.h>//染色using namespace std;//随机创建数组并赋值给向量容器// 生成有n个元素的随机数组,每个元素的随机范围为[rangeL, rangeR] 闭区间void* create(vector<int> &v) {.原创 2021-12-05 00:10:00 · 313 阅读 · 0 评论 -
创建无向图邻接表
#include <iostream>#include <stdlib.h>using namespace std;typedef struct EdgeNode//边表节点{ int adjvex;//存储该顶点对应的下标 struct EdgeNode* next;//指向该顶点的下一个邻接点}EdgeNode;typedef struct VertexNode//顶点表结点{ char data;//顶点 EdgeN...原创 2021-12-03 19:39:44 · 1779 阅读 · 0 评论 -
创建无向邻接图
/*邻接表特点:顶点 vi 的出度为第 i 个单链表中的结点个数顶点 vi 的入度为整个单链表中邻接点域值为 i-1 的结点个数逆邻接表特点:顶点 vi 的入度为第 i 个单链表中的结点个数顶点 vi 的出度为整个单链表中邻接点域值为 i-1 的结点的个数*/#include<iostream>using namespace std;#define MAX 25typedef char Vertype;typedef int Edgetype;typedef i.原创 2021-12-03 18:38:07 · 258 阅读 · 0 评论 -
OJ统计字符出现频度
#include<iostream>using namespace std;int main(){ char c[100]; //输入的字符串 while (cin >> c && c[0] != '0') //输入一段字符串 { int i, b[36] = { 0 }; //存储对应字符的个数 for (i = 0; c[i] != '\0'; .原创 2021-12-02 11:53:03 · 205 阅读 · 0 评论 -
OJ测试交换二叉树的左右结点
#include<iostream>#include<stack> #include<queue> #define OK 1#define maxsize 100using namespace std;//定义一棵树的结构体包括根结点、左孩子,右孩子(字符树)typedef struct Tnode { char data; string combine_data; //结点数据域(数值,可大于9),用于树的表达式求值 struct Tnode* .原创 2021-11-28 22:24:12 · 88 阅读 · 0 评论 -
树的中缀表达式求值
本段代码的功能包括:1、用不同的前序遍历创建二叉树。2、分别用递归或借助栈实现二叉树的前、中、后序遍历。3、二叉树的深度、广度遍历。4、判断一棵树是否是完全二叉树、满二叉树5、用不同方法求所有根结点到树叶的路径、树叶到根结点的路径6、求树的树宽、树深(树高)7、求树的最长路径8、输出所有叶子结点9、计算二叉树零度、一度、二度结点的数量10、将数的中缀表达式转化为后缀表达示,并求解树的中缀表达式C++实现树的前中后序遍历、广度、深度优先遍历、求叶子结点、一度、二度.原创 2021-11-24 10:51:07 · 1090 阅读 · 0 评论 -
C++实现对一棵树树的所有操作
/*测试树:ABC00DE0G00F00H..ABS00C00DE00FG0H00I00ABD00E00CF000 完全二叉树 ABD00E00CF00G00满二叉树abcd00e00f00ig00h00abd00e00cf00g00123-1-14-1-156-1-18-1-11 2 3 0 0 5 0 0 6 7 0 0 9 0 0*/#include<iostream>#include<stack> #include<queue> .原创 2021-11-23 10:50:13 · 387 阅读 · 0 评论 -
清屏函数,清空屏幕
void Clear(){ cin.clear(); cin.ignore(1, EOF); cout << endl; system("cls");//清屏函数}原创 2021-11-22 00:20:53 · 2354 阅读 · 0 评论 -
C++实现树的前中后序遍历、广度、深度优先遍历、求叶子结点、一度、二度结点数量、判断是否是完全、满二叉树、交换左右结点、求解所有根结点到树叶的路径、求最大宽度、高度、树深、求最长路径、输出所有叶子结点
先上传,有时间再改逻辑/*测试树:ABC00DE0G00F00H..ABS00C00DE00FG0H00I00ABD00E00CF000 完全二叉树 ABD00E00CF00G00满二叉树abcd00e00f00ig00h00abd00e00cf00g00*/#include<iostream>#include<stack> #include<queue> #define OK 1#define maxsize 100using .原创 2021-11-22 00:18:32 · 929 阅读 · 0 评论 -
树的深度、广度优先搜索C++实现
输入:测试几颗不同的树,输入零结束程序(OJ测试题)abcd00e00f00ig00h00abd00e00cf00g000代码:#include <iostream>#include <stdlib.h>#include <malloc.h>#include <Stack>#include <Queue>#define OK 1using namespace std;typedef struct Tnode {.原创 2021-11-21 11:11:45 · 737 阅读 · 0 评论 -
关于一棵二叉树的各种操作的实现
先通过前序遍历的方法创建一棵二叉树1、先序遍历、中序遍历、后序遍历(递归和不用递归)2、求树高、树宽3、判断二叉树是否是完全二叉树。#include<iostream>#include<stack> #include<queue> using namespace std;//定义一棵树的结构体包括根结点、左孩子,右孩子typedef struct BiTNode { char data; struct BiTNode* lchild, .原创 2021-11-20 11:16:07 · 694 阅读 · 0 评论 -
通过先序遍历的方法创建一棵二叉树
代码://按照先序遍历序列建立二叉树的二叉链表/* 1.从键盘输入二叉树的节点信息,建立二叉树的存储结构,左右孩子为空的用符号#表示; 2.在建立二叉树的过程中按照二叉树先序方式建立;*/int CreateBiTree(BiTree &T){ scanf("%c", &ch); if(ch == '#'){ T=NULL; }else{ if( !( T = (BiTNode *)malloc(size..原创 2021-11-19 10:11:00 · 26424 阅读 · 5 评论 -
栈的中缀、后缀表达式求值、中缀转后缀表达式求值
1、中缀表达式求值输入:2+2=20*(4.5-3)=0#include <iostream>#include<cmath>#include <iomanip>#define MAXSIZE 1000using namespace std;char op[7] = { '+', '-', '*', '/', '(', ')', '=' };typedef struct { char *base; char *top; int原创 2021-11-18 19:38:22 · 906 阅读 · 0 评论 -
C++创建哈夫曼树
1、输入结点个数和权重创建哈夫曼树#define _CRT_SECURE_NO_WARNINGS#include<bits/stdc++.h>using namespace std;//haffman 树的结构typedef struct{ //叶子结点权值 unsigned int weight; //指向双亲,和孩子结点的指针 unsigned int parent; unsigned int lChild; unsigned原创 2021-11-17 19:25:57 · 2741 阅读 · 0 评论 -
Visual Studio 2019中使用字符处理函数报错问题的处理方法
1、在头文件include之前加上#define _CRT_SECURE_NO_WARNINGS2、在头文件include之前加#pragma warning( disable : 4996)原创 2021-11-17 09:10:24 · 818 阅读 · 0 评论 -
C++用树实现中缀表达式求值
#include <iostream>#include <stdlib.h>#include<bits/stdc++.h>using namespace std;typedef struct node{ char data;//当前结点对应的值 struct node* lchild, * rchild;//左子树指针和右子树指针} *TreeNode, Node;void CreateTree(TreeNode& tree).原创 2021-11-17 08:46:56 · 794 阅读 · 0 评论 -
C++前中后序遍历树的方法
#include<iostream>using namespace std;//定义二叉树节点class binarynode{public: char ch; //节点数据域 binarynode* lchild; //左孩子 binarynode* rchild; //右孩子};//递归遍历//先序void recursion_dlr(binarynode* root){ if (root == NULL) { return; } //遍.原创 2021-11-16 09:51:14 · 631 阅读 · 0 评论 -
数据结构中的一些重要概念
第一章1、时间复杂度:之最坏情况下,估算算法执行时间的一个上界。原创 2021-11-13 19:59:33 · 2230 阅读 · 0 评论 -
入栈和出栈的基本操作
描述输入一个整数序列a1,a2,a3...,an。当ai不等于-1时将ai进栈;当ai=-1时,输出栈顶元素并将其出栈。输入多组数据,每组数据有两行,第一行为序列的长度n,第二行为n个整数,整数之间用空格分隔。当n=0时输入结束。输出对于每一组数据输出若干行。每行为相应的出栈元素。当出栈异常时,输出“POP ERROR”并结束本组数据的输出。51 2 -1 -1 151 -1 -1 2 20输出:211POP ERROR代码:#include<原创 2021-11-08 12:57:16 · 1381 阅读 · 0 评论 -
入栈出栈的基本操作
入栈和出栈的基本操作描述输入一个整数序列a1,a2,a3...,an。当ai不等于-1时将ai进栈;当ai=-1时,输出栈顶元素并将其出栈。输入多组数据,每组数据有两行,第一行为序列的长度n,第二行为n个整数,整数之间用空格分隔。当n=0时输入结束。输出对于每一组数据输出若干行。每行为相应的出栈元素。当出栈异常时,输出“POP ERROR”并结束本组数据的输出。输入样例 151 2 -1 -1 151 -1 -1 2 20输出样例:211POP E.原创 2021-11-06 08:51:12 · 6617 阅读 · 0 评论 -
数据结构练习题之图书去除重复元素
输入样例:99787302257646 Data-Structure 35.009787302164340 Operating-System 50.009787302219972 Software-Engineer 32.009787302203513 Database-Principles 36.009787810827430 Discrete-Mathematics 36.009787302257800 Data-Structure 62.009787811234923 Compil原创 2021-10-23 15:46:40 · 232 阅读 · 0 评论 -
数据结构练习题之--查找特定位置节点&&根据位置插入新结点
定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后根据指定的最佳位置的序号,查找该位置上的图书,输出相应图书的信息。输入样式:89787302257646 Data-Structure 35.009787302164340 Operating-System 50.009787302219972 Software-Engineer 32.009787302203513 Database-Principles 36.00978781082743原创 2021-10-22 16:54:11 · 414 阅读 · 0 评论 -
数据结构练习题之尾插法之下的链表各项操作
第一题:定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后将读入的图书逆序存储,逐行输出逆序存储后每本图书的信息。输入:89787302257646 Data-Structure 35.009787302164340 Operating-System 50.009787302219972 Software-Engineer 32.009787302203513 Database-Principles 36.009787810827430 D原创 2021-10-22 12:04:54 · 160 阅读 · 0 评论 -
数据结构练习题之---链表
1、描述定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后统计图书表中的图书个数,同时逐行输出每本图书的信息。输入9787302257646 Data-Structure 35.009787302164340 Operating-System 50.009787302219972 Software-Engineer 32.009787302203513 Database-Principles 36.009787810827430 Discre原创 2021-10-17 14:27:31 · 2070 阅读 · 0 评论 -
顺序表,读入相应数据完成信息表的创建,然后根据指定的位置序号,查找,输出相应图书的信息。
输入:89787302257646 Data-Structure 35.009787302164340 Operating-System 50.009787302219972 Software-Engineer 32.009787302203513 Database-Principles 36.009787810827430 Discrete-Mathematics 36.009787302257800 Data-Structure 62.009787811234923 Compile.原创 2021-10-17 10:45:42 · 141 阅读 · 0 评论 -
数据结构算法练习题
89787302257646 Data-Structure 35.009787302164340 Operating-System 50.009787302219972 Software-Engineer 32.009787302203513 Database-Principles 36.009787810827430 Discrete-Mathematics 36.009787302257800 Data-Structure 62.009787811234923 Compiler-Prin.原创 2021-10-16 20:33:14 · 423 阅读 · 0 评论 -
找出顺序表中某个数据最大的元素并输出所有最大数据的所有元素信息
#include<iostream>#include<string>#include<iomanip>using namespace std;#define OK 1#define error 0;#define MAXSIZE 500typedef struct{ string IBSN; string NAME; float PRICE;}Book;typedef struct{ Book* elem;//Book类型的指针 in.原创 2021-10-16 19:20:42 · 957 阅读 · 0 评论 -
定义顺序表实现信息的逆序存储,再逐行输出逆序存储后每本图书的信息
#include<iostream>#include<string>#include<iomanip>using namespace std;#define OK 1#define error 0;#define MAXSIZE 500typedef struct{ string IBSN; string NAME; float PRICE;}Book;typedef struct{ Book* elem;//Book类型的指针 ...原创 2021-10-16 19:18:04 · 326 阅读 · 0 评论 -
用顺序表实现对图书信息的修改排序代码
9787302257646 Data-Structure 35.009787302164340 Operating-System 50.009787302219972 Software-Engineer 32.009787302203513 Database-Principles 36.009787810827430 Discrete-Mathematics 36.009787302257800 Data-Structure 62.009787811234923 Compiler-Princi.原创 2021-10-16 11:13:52 · 475 阅读 · 0 评论 -
将链表中所有结点连接方向原地逆转,仅利用链表原来的存储空间,时间复杂度为O(1)
//将链表中所有结点连接方向原地逆转,仅利用链表原来的存储空间,时间复杂度为O(1)#include<iostream>using namespace std;typedef struct LNode{ int data; LNode* next;}LNode, * LinkList;int CreateList_L(LinkList& L, int n){ LNode* p, * r; L = new LNode; L->next = NULL; .原创 2021-10-16 09:01:14 · 1120 阅读 · 0 评论 -
查找长度为n的单链表的最大值结点
//遍历查找长度为n的单链表的最大值的结点#include<iostream>using namespace std;typedef int Status;typedef int elemtype;#define OK 1#define ERROR 0typedef struct LNode{ elemtype data; struct LNode* next;}LNode, * LinkList;void CreateList_L(LinkList& L, .原创 2021-10-16 08:59:16 · 750 阅读 · 0 评论 -
C++实现将两个非递增的有序链表合并为一个非递减的有序链表不改变原来的存储空间,允许有重复元素出现
//将两个非递减的有序链表合并为一个非递增的有序链表 #include<iostream>#include<stdlib.h>using namespace std;typedef struct Lnode { //定义链表 int data; struct Lnode* next;}link;Lnode* Init_List(int n) { //初始化链表,确定长度,输入数据 Lnode* p = 0, * q = 0;.原创 2021-10-16 08:57:52 · 736 阅读 · 0 评论 -
用C++实现将两个递增链表合并为一个递增链表,不改变原来的存储空间,且不允许出现重复的元素
代码:#include<iostream>using namespace std;typedef struct { int data;} Data;typedef struct LNode { Data elem; struct LNode* next;}Lnode, * Linklist;//单链表初始化int Init_List(Linklist& L)//&L可以直接对L操作,这样不用返回结构体{ //L = (Linklist)mallo原创 2021-10-15 23:35:40 · 1833 阅读 · 4 评论 -
顺序表的合并代码可直接运行
合并顺序表//合并两个顺序表#include<stdio.h>#include<stdlib.h>int *MergeList_L(int* La, int* Lb, int Length_La, int Length_Lb){ int* newArray = (int*)malloc(Length_La+Length_Lb); int k = 0, i = 0, j = 0; for (; i < Length_La && j <原创 2021-10-13 10:33:09 · 132 阅读 · 0 评论 -
数据结构,介绍单链表的头插法、尾插法、删除操作完整代码可直接运行
#include<iostream>#include<stdio.h>#include<stdlib.h>using namespace std;typedef struct Node { int data; struct Node* next;};//初始化,创建一个有头结点的链表Node* InitList(){ Node* L = (Node*)malloc(sizeof(Node)); L->data = 0; L->n.原创 2021-10-11 19:41:51 · 308 阅读 · 0 评论 -
前插法和后插法建立单链表
前插法从空表开始重复读入数据1、生成新节点2、将读入的数据存放到新的数据域中3、将该新节点插入到链表的前端void CreateList_F(LinkList& L, int n) { L = new LNode; L->next = NULL;//建立带有头结点的单链表 for (i = n; i > 0; --i) { p = new LNode;//生成新的节点 cin >> p->data;//输入元素值 p->ne原创 2021-09-27 19:20:09 · 5006 阅读 · 0 评论 -
链表的使用
1、单链表存储结构定义typedef struct LNode { Elem Type data; //数据域 struct LNode* next; //指针域}; LNode, * LinkList; // *LinkLIst为Lnode类型的指针2、销毁操作Status DestroyList_L(LinkList& L) { LinkList p; while (L) { p = L; L = L->next; delete p; } re原创 2021-09-26 23:01:48 · 71 阅读 · 0 评论