- 博客(21)
- 资源 (1)
- 收藏
- 关注
原创 C++的四种类型转换
class Base { int _i; virtual void foo() {};//基类必须有虚函数。保持多态特性才能使用dynamic_cast};class Sub : public Base {public: char* _name[100]; void Bar() {};};int doSomething() { return 0;}int main() { /* const_cast */ struct T { int i; }const a; //
2022-04-10 11:35:53
947
原创 简单选择、堆、归并、快速排序
简单选择排序简单选择排序是一种直观的排序算法,其思想是在未排序的序列中选出最小的元素和序列的首位元素交换,接下来在剩下的未排序序列中再选出最小元素与序列的第二位元素交换,依此类推,最后形成从小到大的已排序序列。void swap (int& a, int& b) { int temp{ a }; a = b; b = temp;}void SimpleSelectionSort(vector<int>& v) { for (int i = 0; i &l
2021-10-27 11:39:20
303
原创 PAT 堆中的路径(C++实现)
题目链接 7-5 堆中的路径 (25 分)考察了最小堆的基本操作,本质上是最小堆的建立过程。可以用较为简单的逐个插入实现,也可以先构造树,再进行树的调整,后者的时间复杂度较低,和插入堆的元素个数N成线性关系,为 O(N) ,前者为O(NlogN)。我用的的简单的插入方法。运行结果我的代码#include<iostream>#include <vector>using std::cin;using std::cout;using std::endl;usin
2021-10-14 10:48:44
177
原创 PAT Root of AVL Tree(C++实现)
题目链接7-6 Root of AVL Tree (25 分)运行结果我的代码#include<iostream>using namespace std;//返回较大值int Max(int a, int b){ return a > b ? a : b;}//结点struct Node { int Data; Node * Left; Node * Right; int Height;};using Position = Node * ;cl
2021-10-08 19:10:27
187
原创 PAT List Leaves C++实现
题目链接7-4 List Leaves (25 分)我的运行结果我的代码#include<iostream>#include<vector>using namespace std;using Position = int;template<typename T>class Queue{public: Queue(int MaxSize = 100); ~Queue(); bool IsFull();//判断队列是否满 bool IsEm
2021-09-25 12:47:38
144
原创 C++实现搜索二叉树的基本操作
敲代码中遇到的最大的一个坑是:如果原来有一个指针ptr1,指向的地址为0X,然后新声明一个指针ptr2,也让ptr2指向的地址为0X,对ptr2进行操作能够影响到0X地址,间接地影响指针ptr1,但本质上ptr1和ptr2是两个指针,因为发生的是拷贝,拷贝的对象当然是两个!一个具体的例子:执行“delete ptr2;ptr2=nullptr;”,ptr1指向的地址已经被销毁,但ptr1不会被置为nullptr,而依然指向原地址。也正是因为这个坑,代码里才有如此多的引用“&”,引用的本质是别名,而不
2021-09-20 14:29:16
172
原创 PAT一元多项式的加法与乘法C++实现
动态数组法实现首先是我的运行结果,测试点四没过是我代码设计并没有考虑输入0多项式的情况,我也并不想补全这个设计漏洞了,(摊手做这道题的过程中(改bug过程中),值得念叨的点有两个:一、构造函数的深拷贝和浅拷贝//构造函数用来开辟空间Poly::Poly(int MaxSize) :Data1{ new int[MaxSize] }, Data2{ new int[MaxSize] }, MaxSize{ MaxSize }, MaxSize1{ MaxSize }{}在构造函数中,我为动态
2021-09-15 09:37:54
284
原创 C++实现队列链表
闹了个大笑话,记录一下,居然卡了很久template<typename T>const T& ListQueue<T>::Delete(){ if (!IsEmpty()) { Positon<T> temp{ Front }; Front = Front->Next; const T& X{ temp->data }; delete temp; --length; return X; }}这里我的X是引
2021-09-14 00:14:40
164
原创 C++实现顺序循环队列
#pragma once#include<iostream>using std::cout;using Position = int;template<typename T>class Queue{public: Queue(int MaxSize=16); ~Queue(); const bool& IsFull();//判断队列是否满 const bool& IsEmpty();//判断队列是否为空; const bool&
2021-09-13 20:18:20
339
原创 C++实现链式栈
#pragma oncetemplate<typename T>struct SNode { T data; SNode* Next;};template<typename T>using List = SNode<T>*;template<typename T>using Top = SNode<T>*;template<typename T>class Stack{public: Stack();
2021-09-13 17:36:22
537
原创 用一个数组实现两个堆栈C++
使两个栈分别从数组的两头开始向中间生长,当两个栈的栈顶指针相遇时,表示两个栈都满了。此时,最大化地利用了数组空间。在实现顺序栈的基础上,实现双栈,顺序栈见我的另一篇博客:C++实现顺序栈的基本功能代码如下#pragma once#include<iostream>using std::cout;using std::endl;using Position = int;template<typename T>class Stack{public: Stac
2021-09-13 16:06:09
417
原创 C++实现顺序栈的基本功能
#pragma once#include<iostream>using std::cout;using std::endl;using Position = int;template<typename T>class Stack{public: Stack(int MaxSize=1000); const bool& IsFull(); const bool& IsEmpty(); const bool& Push(const T&
2021-09-13 15:36:16
161
原创 C++实现单向链表的基本功能
#pragma once#include<iostream>using std::cout;using std::endl;template<typename T>struct Node{ T data;//数据域 Node* Next;//指针域,指向下一个结点};template<typename T>using List = Node<T>*;//别名要放在构造体下面,list类型的参数表示头结点template<t
2021-09-10 17:20:39
140
原创 C++实现顺序表的一些基本功能
实现了顺序表的一些最基本功能。。。。#pragma once#include<iostream>using std::cin;using std::cout;using std::endl;const int MAXSIZE = 1000;//顺序表的最大长度using Position = int;template<typename T>class SeqList {public: SeqList();//顺序表的默认构造函数,创建一个空表 SeqLi
2021-09-10 14:39:28
139
原创 用分治法实现乘幂运算C++
如果说,让你写一个乘幂运算的函数,你会怎么实现?easy!那不就是用一个for循环遍历n次就ok了。显然for循环遍历的方式的时间复杂度为O(N)O(N)O(N),能不能把它优化到log(N)log(N)log(N)呢?答案是肯定的!上代码#include<iostream>using std::cin;using std::cout;double myPow(double x, int N){ if (N / 2 == 0) //只有一个x return x;
2021-09-09 00:10:14
1339
原创 像素放大题
师兄的一道笔试题我的代码#include<iostream>#include<vector>using namespace std;int main(){ int M{ 0 }, N{ 0 }; cin >> M >> N; vector < vector<int>>v{}; v.resize(M); vector < vector<int>>v1{}; v1.resize(M*
2021-09-07 21:41:24
169
原创 单向线性链表实现堆栈,为什么不能用链表的尾部作为栈顶?
考虑用单向链表的尾部作为栈顶,先后执行下述操作。1、连续入栈操作假设初始是个空栈,连续压入三个元素。嗯!这样是没问题的,但是——2、连续出栈操作经过步骤一,我们现在有三个元素了,现在来把它们依次弹出。第一个元素:“我出来了,里面的弟弟快跟上!”但是——他怎么晓得里面的弟弟在哪里?链表是单向的啊,只有上一个弟弟晓得他在哪里,他是不知道上一个弟弟在哪里的,over!出栈操作大失败。所以说嘛,单向线性链表实现堆栈,是不能用链表的尾部作为栈顶滴!...
2021-09-01 16:25:26
1197
6
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人