- 博客(16)
- 问答 (3)
- 收藏
- 关注
原创 C++实现一个堆(更改堆中数据后,可以重新调整)
库中带的堆结构,无法实现更改后再调整,此时需要自己实现思路:使用一个hash表,保存数据与其对应的下标位置,需要更改时通过下标调整堆结构#define _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 1#include<iostream>#include<vector>#include<hash_map>#include<string>using namespace std;//堆中存储数据使用自定义类
2022-04-12 10:59:59 367
原创 实现一个特殊的栈(能够返回栈中最小值)
实现一个特殊的栈(能够返回栈中最小值)思路:使用两个栈,data栈和min栈,同时进行push和pop,push时比较当前值与min栈栈顶元素大小,令较小值进栈。注:min栈始终记录着每一个状态下的最小值class m_stack{ public: void push(int value) { if(data.empty()&&min.empty()) { data.push(value); min.push(value); } el
2022-04-09 15:58:25 415
原创 单链表逆置:空间复杂度O(1)
带头结点单链表逆置从链表(带头结点)首个数据结点开始,重新头插法建表,将节点链接到头结点上//单链表结点结构typedef struct LNode{ int data; struct LNode* next;}LNode;void Inversion(LNode* head){ LNode* phead=head->next; LNode* q; head->next=NULL; //头结点next指针置空 while(phead!=NULL) { q=ph
2021-12-02 10:37:16 798
原创 链表:查找倒数第k个位置上的节点
//链表结点结构typedef struct Node{ int data; struct Node* next;}Node;思路:双指针,快指针先走k步,之后另一指针开始移动快指针:k+(n-k)慢指针:(n-k)此时慢指针来到倒数第k个结点位置int findElem(Node* head,int k){ int i=0; Node* phead=head->next; //带头结点的单链表 Node* p=head; while(phead!=NULL) {
2021-12-01 17:06:26 311
原创 C/C++面试(湖南兴盛优选一面)
1.STL中vector和list的区别a.vector内存空间连续,list双向链表实现,内存空间不是连续的b.vector插入删除中间元素需要移动后面元素,时间复杂度高;list插入删除元素依靠指针 操作,时间复杂度低c.vector以下标查找元素时间复杂度为O(1),list查找元素需要遍历链表,时间复杂度高2.怎么样判断一个单链表有没有环?快慢指针,快指针一次走两步,慢指针一次走一步,如果快指针不等于慢指针并且快指针不为空时一直循环,如果快指针为空,快指针不等于慢指针,说明链表没有环;如果
2021-11-24 07:39:09 1181 16
原创 C++实习面试(机试:湖南卫导信息科技)
总共3道题1.从一组身高中找出身高差最小的两个思路,排序后依次遍历将数组中后者减去前者,记录产生最小身高差的下标#include<iostream>using namespace std;void my_sort(int a[]){ for (int i = 1; i < 5; ++i) { int temp = a[i]; int end = i; while (end >= 0) { if (a[end] < a[end - 1])
2021-11-18 21:17:04 1528 5
原创 判断二叉树是否是二叉搜索树
二叉搜索树:任何一个节点的值都比左子树上的值大,比右子树上的值小判断:二叉搜索树中序遍历是一个递增序列1.中序遍历放入容器vector中,依次比较相邻元素void inorder_traversal(TreeNode& root,vector<TreeNode> v){ if(root==NULL) return ; inorder_traversal(root->left,v); v.push_back(root); inorder_traversal(root-
2021-11-17 09:56:42 865
原创 递归、非递归实现二叉树先序、中序、后序遍历
1.递归//中序遍历void inorder_traversal(Node* head){ if(head==NULL) return ; if(head->left!=NULL) inorder_traversal(head->left); printf("%d ",head->val); if(head->right!=NULL) inorder_traversal(head->right);}//先序遍历void preorder_traversal
2021-11-16 18:01:36 309
原创 数据结构与算法——反转链表
1.使用容器栈ListNode* reverseList(ListNode* head) { if(head==NULL) return head; stack<ListNode*> s; ListNode* p=head; while(p!=NULL) { s.push(p); p=p->next; }
2021-11-15 16:52:40 242
原创 C语言——冒泡、选择、插入
//冒泡排序void bubsort(int arr[],int n){ int i,j,flag; for(i=n;i>=0;--i) { flag=1; for(j=0;j<i-1;++j) { if(arr[j]<arr[j+1]) { swap(arr,j,j+1); flag=0; } } if(flag) break; }}//选择排序void selsort(int arr[],int n){ in
2021-11-15 14:12:46 1195
原创 C语言——堆排序
从小到大排序:建大根堆大根堆(大顶堆)是指根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,属于二叉堆的两种形式之一。//交换两个位置的值void swap(int arr[], int i, int j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp;}//建大根堆,找到最大元素void heapinsert(int arr[],int index){ while(arr[index]>arr
2021-11-14 14:27:35 945
原创 C语言—归并排序
归并排序思想:分治(从下而上)void process(int arr[],int L,int mid,int R){ int* a=(int*)malloc(sizeof(int)*(R-L+1); int i=L; int j=mid+1; int k=0; while(i<=mid&&j<=R) { if(arr[i]<arr[j]) a[k++]=arr[i++]; else a[k++]=arr[j++]; } while(i&
2021-11-13 15:53:52 609
原创 C语言—快排nlogn
快排代码实现思想:分治//将L-R范围上的元素分成三部分,并将左右两个部分的边界返回int* partition(int arr[],int L,int R){ srand((unsigned int)time(NULL)); int num=rand()%(R-L+1)+L;//随机生成指定元素,当指定元素太大或太小(相对于数组内部而言),都将影响快排效率 int left=L-1; int right=R+1; while(L<right) { //第一部分:小于指定元素的
2021-11-13 15:37:03 772
原创 C++程序编译过程
编译过程分为四个过程:预处理,编译,汇编,链接编译预处理:处理以#开头的指令;编译、优化:将源代码.cpp文件翻译成.s汇编代码汇编:将汇编代码.s翻译成机器指令二进制.o文件链接:汇编程序生成的目标文件,并不会立即执行,因为可能会出现:.cpp文件中的函数引用了另一个.cpp文件中定义的符号或者调用了某个库文件中的函数。链接的目的就是将这些文件对应的目标文件连接成一个整体,从而生成可执行的.exe文件 链接分为两种:静态链接:代码从其所在的静态链接库中拷贝到最终的可执行程序
2021-09-19 00:10:09 103
原创 C++面试语言基础
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码
2021-08-28 20:35:09 187
原创 C++强制类型转换
@C++类型转换C++语言不会直接将两个不同类型的值进行运算(除了自己定义相应运算规则),而是先根据类型转换规则设法将运算对象的类型统一后再求值。C++中类型转换大体可以分为隐式类型转换和显示类型转换两种1. 隐式类型转换在程序执行过程中,无需程序员介入或了解,自动进行的类型转换被称作隐式类型转换。1.1算数转换添加链接描述2.显示类型转换新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全
2021-08-28 16:14:31 439
空空如也
C++class中unordered_set成员变量,编译时出错,怎么解决
2021-11-17
怎么删除list中指定对象
2021-08-24
C++中怎么给类赋char数组初值?
2021-05-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人