![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
索半斤_suobanjin
郑州轻工业大学在读硕士研究生 | 啥也不会的小fw
展开
-
841软件工程专业综合相关代码题总结(2)—— 栈、队列相关
本文针对郑州轻工业大学软件学院841软件工程专业综合相关代码题进行总结原创 2022-10-22 20:06:50 · 488 阅读 · 1 评论 -
841软件工程专业综合代码题(1)—— 线性表
本文针对郑州轻工业大学软件学院841软件工程专业综合相关的代码题中线性表相关问题进行了总结原创 2022-10-19 12:01:44 · 696 阅读 · 1 评论 -
顺序表插入算法的时间复杂度以及顺序表常考问题
本文主要对顺序表的插入算法时间复杂度进行了分析,分析了插入算法最好、最坏以及平均时间复杂度,同时对顺序表常考的问题进行了总结。原创 2022-07-07 13:00:42 · 7958 阅读 · 0 评论 -
数据结构中常见的时间复杂度分析题目
本文首先介绍了数据结构中时间复杂度的基本概念,随后对常见的时间复杂度分析相关题目进行分类,最后通过相关的时间复杂度分析的题目来进行实际的讲解。原创 2022-07-03 18:47:48 · 3069 阅读 · 0 评论 -
兰州理工大学数据结构算法设计考研样题
1、一组整数以顺序结构存储,设计将所有偶数元素移到所有奇数元素之前的算法//顺序表结构typedef struct list{ int data[MAXSIZE]; int len = 0;}*SList;//算法实现void sortNumber(SList &list){ int data[MAXSIZE]; int i = 0; int j = list->len-1; for(int k=0;k<list->len;k++){ if(list-&原创 2021-09-28 17:23:16 · 945 阅读 · 0 评论 -
C语言实现学生管理系统(新版)
一、前言时光匆匆,当年在实验室苦逼的敲代码的小学弟已经成了现在的大四老学长o(╥﹏╥)o,经过四年的洗礼,依然是个菜鸡。不过技术还是有所精进,最近考研复习数据结构又翻到了这个大一时候写的项目,然后发现有点小bug当时没有解决,于是强迫症又犯了,决定给它修好。现在针对第一版修复了以下功能:1、增强了系统的安全性2、修复了文件读取的错误3、将冒泡排序修改为快速排序如有问题可以在评论区反馈,有时间我会在修改。后续可能也会尝试使用其它数据结构来重构系统或者使用java来重写项目。二、代码实现#incl原创 2021-09-15 22:11:12 · 489 阅读 · 0 评论 -
完美二叉树填充每个节点的下一个右侧指针
一、问题描述今天在北航考研群看到老哥发了一道二叉树的题,感觉挺有意思的,就做了做,题目如下:二、思路分析思路需要结合代码来看三、代码实现typedef struct Node{ int val; struct Node *left; struct Node *right; struct Node *next; }*trees;void linkTree(trees tree){ int top = 0,rear = 0; //初始化队列 int maxSize = 50;原创 2021-09-15 16:43:06 · 159 阅读 · 1 评论 -
快速排序的优化 —— 三数取中
/*** 正常情况下,快排都是选取最左侧为基准数,但是在某些情况下,比如数组基本有 序的情况下,这种选取方式效率较低。为了解决这个问题,我们可以通过三数(左、右、中)选取中间的数来提高整体的效率。*/public class QuickSortDemo2 { public static void main(String[] args) { int[] array = {1,4,5,3,6,5,9,10,45,34,23,12,54,77,43,22,10,87,32,27,8原创 2021-08-31 18:54:34 · 789 阅读 · 0 评论 -
leetcode简单题(一) —— 镜像二叉树
一、问题描述二、代码实现typedef struct Tree{ int data; struct Tree *left = NULL; struct Tree *right = NULL; }*BTree;BTree mirro(BTree root){ if(root == NULL){ return NULL; } BTree left = mirro(root->left); BTree right = mirro(root->right); root-&原创 2021-08-26 20:37:07 · 78 阅读 · 0 评论 -
数据结构考研真题(四)—— 删除单链表中绝对值相同的结点
一、问题描述二、思路分析这个问题,首先很容易想到要双重遍历,但是时间复杂度会比较高。那么我们可以考虑使用数组计数,这样就可以遍历一遍,这也算是一个比较好用的套路。三、代码实现3.1 第一种解法void deleteDul(Link &link){ Link cur = link->next; while(cur != NULL){ Link next = cur; while(next != NULL && next->next != NULL){原创 2021-08-23 19:35:44 · 495 阅读 · 0 评论 -
数据结构考研真题(三)——二叉树所有叶结点的带权路径长度之和
一、问题描述二叉树的带权路径长度(WPL)是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉树T,采用二叉链表存储,结点结构为:其中叶结点的weight域保存该结点的非负权值。设root为指向T 的根结点的指针,请设计求T的WPL 的算法,要求:1) 给出算法的基本设计思想;2) 使用C 或C++语言,给出二叉树结点的数据类型定义;3) 根据设计思想,采用C 或C++语言描述算法,关键之处给出注释。二、思路分析可以使用先序遍历也可以使用层次遍历,层次遍历还没看三、代码实现结构体定义原创 2021-08-23 10:55:37 · 1257 阅读 · 0 评论 -
数据结构天勤练习题(六)—— 合并两个递增数组
一、问题描述合并两个升序数组a,b到数组c中。二、思路分析1、第一种就是双重遍历,事件复杂度O(M*N)2、第二种先合并两个数组然后使用快排,时间复杂度为O(n+nlogn)3、第三种比较巧妙,主要讲一下第三种是如何做的设置a数组末端索引为i,b数组末端索引为j,设置c数组为c[countIndex]同时从后往前遍历数组元素如果b[j]>a[i]则,count[countIndex] = b[j],j–如果b[j]<=a[i]则,count[countIndex] = a[i原创 2021-08-21 08:37:43 · 470 阅读 · 0 评论 -
数据结构考研真题(二)—— 数组循环左移
一、问题描述二、思路分析根据这几天做题,我发现考研题难度确实大,而且这尼玛题目总是搞得让你看不懂,总体来说思路不是很好想。那么这种情况下该如何准备代码题呢?我认为还是得多练,多见,见得多了也就有点思路了。像链表或者顺序表的代码题,很多可以用双指针来解决,之所以能想到双指针是因为两个指针可以在O(n)时间复杂度下对顺序表遍历两次而无需使用双重循环。回归到本题,也是使用了双指针,但是题目首先不太容易看懂,其次就是思路也确实不太好想,这只能靠多刷题来总结了。三、代码实现#include<stdi原创 2021-08-20 17:34:56 · 348 阅读 · 0 评论 -
数据结构天勤练习题(五)—— 删除递增单链表中的重复元素
一、问题描述删除递增单链表中的重复数据。二、思路分析设置两个指针(pre、cur),初始化指向第一个数据结点。cur指针用来遍历链表,如果pre指向结点的值和cur指向结点的值相等则删除cur指向的结点,pre依然指向当前结点,否则pre指向下一结点。三、代码实现#include<stdio.h>typedef struct Node{ int data; struct Node *next;}*Link; void initLink(Link &link){原创 2021-08-19 19:48:01 · 315 阅读 · 0 评论 -
数据结构天勤练习题(四)—— 将顺序表逆置
一、问题描述设计一个算法,将顺序表中所有元素逆置二、基本思路双指针即可解决问题,begin指针指向开头,end指向结尾,然后begin向前后动,end向前移动,当begin == end 或者begin+1 = end时即完成了逆置过程。三、代码实现#include<stdio.h>void reverse(int a[],int n){ int begin = 0; int end = n-1; while(begin != end){ int temp = a[begi原创 2021-08-19 17:11:11 · 528 阅读 · 0 评论 -
数据结构天勤练习题(三)—— 删除单链表中的最小值结点
一、问题描述设计一个算法删除单链表L(有头结点)中的一个最小值结点。二、思路分析设置三个结点,一个用来指向最小值结点的前一个结点(pre),一个指向最小值结点(min),一个用来遍历结点(temp),当遍历结点遇到比最小值结点小的结点时,使最小值结点指向遍历结点,同时使用pre结点遍历链表,直到pre->next的值为min。三、代码实现#include<stdio.h>typedef struct Node{ int data; struct Node *next;}*原创 2021-08-19 16:41:58 · 676 阅读 · 0 评论 -
数据结构天勤练习题(二)—— 计算去除最大公共前缀后两个子表的大小
一、问题描述二、思路分析1、先查找出两个数组中较短的一位的长度2、同时遍历数组查看到第几位两者是相同的(即查找最大公共前缀),这里可以使用一个变量count来计数,count的数量即为最大公共前缀3、判断m、n和count的关系,计算A和B的大小三、代码实现#include<stdio.h>//m为a数组长度,n为b数组长度 int compare(float a[],float b[],int m,int n){ //查找两个数组中较短的长度 int k = n>原创 2021-08-19 15:18:54 · 166 阅读 · 0 评论 -
数据结构天勤练习题(一)—— 建立没有重复元素的单链表
一、问题描述建立一个单链表,并要求字母不重复地存入链表。二、思路分析思路很简单,在添加元素的时候判断前面的结点是否已经存在该值,如果存在则直接跳过即可。三、代码实现#include<stdio.h>typedef struct Node{ char data; struct Node *next;}Node,*Link;void initLink(Link &link){ link = new Node; link->next = NULL;}void原创 2021-08-19 10:56:12 · 471 阅读 · 0 评论 -
数据结构考研真题 (一)—— 查找单链表倒数第k个结点的值
前言本人考本校,不考408(学校比较一般,考408指定是没人来了),但是使用的复习资料是天勤的,本题是天勤书本上的一道408数据结构真题。一、问题描述对于一个带有头结点的单向链表,在不改变链表的前提下,请设计一个尽可能高效的算法,查找链表中倒数第k个位置上的结点。二、思路分析使用快慢指针即可解答此题(另一种思路是两次循环,第一次得到链表长度,第二次得到结果)。三、代码实现#include<stdio.h>typedef struct Node{ int data; stru原创 2021-08-18 22:16:08 · 987 阅读 · 2 评论 -
C/C++语言实现数据结构系列(十三)—— 单链表反转
//传入的单链表为带头节点的单链表,返回的也是带头节点的单链表 void reversion(LinkedList &L,LinkedList &head){ LinkedList next = NULL; LinkedList pre = NULL; LinkedList cur = L; int i = 1; //第一个节点在传入的链表中为虚拟头节点,需要特殊处理 while(cur != NULL){ next = cur->next; cur->n原创 2021-08-17 18:12:48 · 82 阅读 · 0 评论 -
C/C++语言实现数据结构系列(十二)—— 选择排序
#include<stdio.h>//交换最小值和当前最小值 void exch(int array[],int a,int b){ int temp = array[a]; array[a] = array[b]; array[b] = temp;}//选择排序 void selectSort(int array[],int len){ for(int i=0;i<len;i++){ int min = i; for(int j=i+1;j<len;j++原创 2021-08-17 16:28:26 · 58 阅读 · 0 评论 -
C/C++语言实现全排列问题
#include<bits/stdc++.h> void swap(int &x,int &y){ int temp = x; x = y; y = temp;}//全排列问题int count = 0; void dfs(int array[],int k,int m){ if(k == m){ for(int i=0;i<=m;i++){ printf("%d\t",array[i]); } printf("\n"); coun原创 2021-08-17 14:31:54 · 126 阅读 · 0 评论 -
C/C++语言实现数据结构系列(十一)—— 快速排序
#include<stdio.h>//快速排序 void quicksort(int array[],int left,int right){ if(left > right){ return; } int temp = array[left]; int i = left; int j = right; int t; while(i != j){ while(array[j]>=temp && i<j){ j--; }原创 2021-08-16 22:10:14 · 106 阅读 · 0 评论 -
C/C++语言实现数据结构系列(十)—— 冒泡法排序
#include<stdio.h>int main(){ int array[5]; for(int i=0;i<5;i++){ scanf("%d",&array[i]); } //冒泡排序 for(int i=1;i<=4;i++){ for(int j=0;j<5-i;j++){ if(array[j] > array[j+1]){ int a = array[j]; array[j] = array[j+1];原创 2021-08-16 20:28:40 · 106 阅读 · 0 评论 -
C/C++语言实现数据结构系列(九)——中序遍历对二叉树线索化
//中序遍历对二叉树线索化 Status inThread(BiTree tree,BiTree &pre){ if(tree == NULL){ return ERROR; } inThread(tree->left,pre); if(tree->left == NULL){ tree->left = pre; tree->ltag = 1; } if(pre != NULL&&pre->right == NULL){ p原创 2021-08-16 17:16:15 · 102 阅读 · 0 评论 -
C/C++语言实现数据结构系列(八)——双链表实现
#include<stdio.h>#define ERROR 0#define Status int#define SUCCESS 1 typedef struct Node{ int data; struct Node* next; struct Node* pro;}*DLinkedList;void initListNode(DLinkedList &list){ list = new Node; list->next = NULL; list-&g原创 2021-08-13 13:30:01 · 90 阅读 · 0 评论 -
C/C++语言实现数据结构系列(七)——单链表实现
#include<stdio.h>#include<stdlib.h>#define OK true#define ERROR false#define Status bool#define OVERFLOW -2 typedef struct student{ char name[20]; int age;}student;typedef struct LNode{ student data; LNode *next;}LNode,*LinkedList;原创 2021-08-13 13:28:44 · 69 阅读 · 0 评论 -
C/C++语言实现数据结构系列(一)——二叉树及二叉树的基本操作(先序、中序、后序、构造)
#include<stdio.h>#include<math.h>#include<stdlib.h>#include<algorithm>#define Status int#define ERROR -1#define OK 1#define FALSE 0#define MAXSIZE 30using namespace std;typedef struct Tree{ int data; struct Tree* left;原创 2021-08-11 17:05:48 · 122 阅读 · 0 评论 -
C/C++语言实现数据结构系列(二)——单链表实现栈
#include<stdio.h>#define ERROR 0#define Status int#define SUCCESS 1 typedef struct Node{ Node* next; int data;}*Stack; void initStack(Stack &stack){ stack->next = NULL;}Status isEmpty(Stack stack){ if(stack->next == NULL){原创 2021-08-07 09:57:34 · 121 阅读 · 0 评论 -
C/C++语言实现数据结构系列(三)——顺序表实现栈
#include<stdio.h>#define MAXSIZE 8#define ERROR 0#define Status int#define SUCCESS 1 //栈结构体表示typedef struct stack{ int data[MAXSIZE]; int top;}*Stack;//初始化栈void initStack(Stack &stack){ stack->top = -1;}//判断是否为空Status isEmpt原创 2021-08-07 08:46:51 · 91 阅读 · 0 评论 -
C/C++语言实现数据结构系列(四)——链表实现队列
#include<stdio.h>#define ERROR 0#define Status int#define SUCESS 1typedef struct Node{ int data; Node *next;}*QueueNode;typedef struct QNode{ QueueNode front; QueueNode rear;}*Queue;void initQueue(Queue &queue){ queue->front = N原创 2021-08-06 15:59:11 · 106 阅读 · 0 评论 -
C/C++语言实现数据结构系列(五)——顺序表实现队列
#include<stdio.h>#define MAXSIZE 8#define ERROR 0#define Status int#define SUCESS 1typedef struct Node{ int front,rear; int data[MAXSIZE];}*Queue;void InitQueue(Queue &queue){ queue->front = 0; queue->rear = 0;} Status isEmp原创 2021-08-06 09:37:58 · 109 阅读 · 0 评论 -
C/C++语言实现数据结构系列(六)——顺序表实现
#include<stdio.h>#include<stdlib.h>#define MAXSIZE 100#define OK true#define ERROR false#define Status bool#define OVERFLOW -2 typedef struct{ char name[20]; int count;}Book;typedef struct{ Book *elem; int length; }SqList;//顺序表初原创 2021-07-16 19:53:46 · 88 阅读 · 0 评论 -
关于while循环的时间复杂度分析方法
关于更多时间复杂度分析的题目,或者其它涉及while循环时间复杂度分析的问题,可以查看最新博客:https://blog.csdn.net/qq_43437555/article/details/125586946原创 2021-07-14 21:50:56 · 8072 阅读 · 1 评论 -
数据结构之动态数组
一、仿ArrayList代码实现package array;import LinkedList.interfaces.List;import java.util.Collection;import java.util.Iterator;public class ArrayList<T> implements List<T> { private Object[] elements; private static final int DEFAULT_CAP原创 2020-12-29 16:18:07 · 99 阅读 · 0 评论 -
2020年全国高校计算机能力挑战赛初赛java组
前言本人算法能力菜鸡水准,只会写写for循环。大佬手下留情。本次比赛编程题共有4题,但是第四题我没太看明白,而且这道题貌似我和其他人的不一样,具体也不知道咋回事。题解题目1统计从1到N的整数中,所有立方值的平方根为整数的数的格式输入说明:整数N(N<10000)输出说明:符合条件的数的个数,如4^3= 64 = 8^2输入样例:10输出样例:3(说明:样例中符合条件的3个数是1、4、9)import java.util.Scanner;public class Main {原创 2020-11-30 15:00:02 · 1516 阅读 · 9 评论 -
2020全国大学生计算机能力挑战赛模拟题(Java组)
一、题解1、题目:统计1到N(含)之间所有立方数的个数,并输出这个数目。提示:立方数的个数,如8是2的立方数,27是3的立方数,9不是立方数。输入说明:一个整数N(N<100000);输出说明:立方数的个数输入样例:200输出样例:5题解:import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner scanner = new S原创 2020-11-29 09:49:36 · 1545 阅读 · 0 评论 -
2019计算机能力挑战赛Java题目5
给定一个只包含0-9、+’、’的合法数学表达式(长度<1000),规定加号‘+”的优先级高于乘号”,请输出计算结果。输入说明:合法的数学表达式输出说明:输出表达式的计算结果输入样例:123+122输出样例:360思路分析本题本质上是一个简化版的四则运算问题。我们可以使用栈这一数据结构来解决。但是本地的难点是参与运算的数字并不只是10以内,这无疑加大了题目的难度。再本题中我使用StringBuffer来拼接字符串,将10以上的数字进行拼接处理。下面是解决本题的完整代码。代码import ja原创 2020-11-27 20:56:46 · 384 阅读 · 0 评论