自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 动态数组实现

在c++中,vector是一个十分有用的容器。作用:它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。vector在C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。但是万物基于c/c++,那么我们手动尝试着去做一个这样的动态数组容器。在这里我们用到了结构体,以及动态内存,来实现动态内存应有的插入删除初始化,以及查找功能。代码如下:#include<iostream>#include

2022-02-07 18:58:29 852

原创 数据结构之顺序表模拟栈空间

栈是一种线性表;首先它是一种表,所以可以有顺序表和链式表的区别,它是一种操作收到限制的表,只能在表的一端进行插入和删除操作,他在程序设计中应用广泛,递归和嵌套以及迷宫等问题都是以栈空间为雏形的。从图中也可以看出来,栈空间的特点是先进后出。栈的一般操作多为插入和删除,也就是出栈和入栈。但要判断插入是否会溢出,删除是否以及没有可删除的了。#include<iostream>#de...

2020-02-22 15:51:51 92

原创 后缀表达式的计算

对于数字全部进栈对于符号,从栈中弹出右操作数,然后从栈中弹出左操作数,根据符号进行相应的计算,然后运算结果在次压入栈中直到剩下一个值/*基于后缀表达式的计算问题对于数字全部进栈对于符号,从栈中弹出右操作数,然后从栈中弹出左操作数,根据符号进行相应的计算,然后运算结果在次压入栈中直到剩下一个值*/#include <iostream>#pragma warning(disable:4996)using namespace std;typedef struct LINKNODE

2022-02-24 23:12:55 191

原创 中缀表达式转后缀表达式

中缀表达式就是常见的数学表达式,但是把运算符放到数字的后面会更加符合计算机的运算例如5+4= 就是一个中缀表达式 而它的后缀表达式应该是 5 4+ 1+2*3 变成 1 2 3 * +中缀转后缀的算法对于数字直接输出 对于括号:左括号入栈。如果是运算符号的话,就与栈顶符号进行优先级比较,如果栈顶符号优先级低,则此符号入栈,如果栈顶符号优先级高,则将栈顶的符号弹出输出,然后该符号入栈右括号:将栈顶的符号弹出并输出,直到匹配到左括号#include <iostream>#pra

2022-02-24 19:43:29 117

原创 括号匹配(栈)

日常编程中,我们都会用到编译器,但如果我们编写的代码在出现了问题,例如左右括号没有完全的匹配的时候,程序就无法通过运行,这个时候编译器就会报错,那么我们探究一下编译器是如何检查出这个错误的。首先我们知道一个程序就像是一个字符串(忽略空格),我们的括号匹配问题就应在这个字符串中进行处理和查找。但是我们知道相邻的括号是一组,而不是最里面和最外面的随意匹配,因此在多个括号组中,往往最开始的括号是最后一个匹配的,这非常符合栈的先进后出原则,因此我们可以使用一个栈来保存这些括号。这个时候我们的编译器挨个去扫描字

2022-02-23 22:12:02 903

原创 队列(顺序储存)

队列是一种操作受限制的线性表,它的特点和栈相反,是先进先出的原则,并且是只能一边进入另外一面退出。和生活中的银行排队,打饭排队一样,最前面的人总是先办理业务。使用连续储存空间来储存队列的话,我们就需要考虑,每次出队后,就要把后面的元素向前移动。这就和我们数组进行删除元素一样。并且和我们生活中的清空一样,排队时每走一个人,后面的人都会依次向前一个。#include <cstddef>#include <iostream>#pragma warning(disable:4996)

2022-02-20 23:30:45 256

原创 栈的链式储存(链栈)

栈的特点是先入后出。我们这次使用(企业)链表的方式来进行一下实现。#include <iostream>#pragma warning(disable:4996)using namespace std;typedef struct LINKNODE{ struct LINKNODE* next;}LinkNode;typedef struct LINKSTACK{ LinkNode head; int size;}LinkStack;//初始化函数LinkS

2022-02-19 22:56:21 184

原创 栈的实现(顺序空间)

栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。我们可以使用一个数组来当作栈的容器,然后每次增加和删除某位的元素即可,为了让这个数据结构具有更好的通用性。我们使用void*(万能指针)来作为数据的参数进行储存。使用一个size的字段作为

2022-02-18 20:35:51 226

原创 循环链表的实现

企业链表节点实现循环链表,可以给大家一个参考。关于企业链表的不同可以参考我另外一篇文章,单链表中的讲解。循环链表和普通链表的不同,在于链表节点最后的指向问题,在单链表中最后的节点指向是NULL,但是循环链表中最后的指向又再一次的指向了头节点,好处是,要多次要循环输出链表的时候就可以不需要额外设置变量,而是直接相应的倍数。但相应的改变就是在于删除或者插入节点到某个位置时,寻找上一个节点时候的停止搜索条件就应该相应的更改为辅助节点指向头节点的时候停止搜索,而不是一直指向NULL的时候。#include&lt

2022-02-17 17:35:42 745

原创 企业链表的实现

企业链表中将信息单独成为一个节点,然后将next信息,单独分配,这样的话就像一个衣架的挂钩一样,使得链表上的操作可以更加高效和灵活。#include<iostream>#include<iomanip>#pragma warning (disable:4996)using namespace std;//链表节点typedef struct LINKNODE{ LINKNODE* next;}Linknode;typedef struct LINKLIST

2022-02-10 21:51:16 483 1

原创 链表的完整实现

我们知道可以单纯的使用c来模拟一个vector动态数组,可是我们上一次并没有实现,可以传递任意数据来进行数组保存的效果,那我们本次就实现一个动态储存的链表结构并且让他能够接受任何数据。那么什么是链表呢?链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。简单来说链表就像一串珠子一样,是靠着一条线进行连接的。首先我们明确一下链表和普通的数组的优点:链表的优点在于每次插入数据不需要把后面的数据进行大量的移动,而是直接把需要插入的数据和插入位置的前

2022-02-08 21:54:22 510

原创 名称空间总结

一:命名空间的特点用途:解决命名冲突问题1.命名空间下可以放函数、常量、变量、结构体、类namespace A{ int a = 10; //定义了变量 const int c = 2; //定义了常量 void b(){ //定义了函数 } struct test_struct { //定义了结构体 }; class Person{ /...

2020-04-17 16:03:49 321

原创 this指针详解

我们都知道类的成员函数可以访问类的数据(限定符只是限定于类外的一些操作,类内的一切对于成员函数来说都是透明的),那么成员函数如何知道哪个对象的数据成员要被操作呢,原因在于每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。注:this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。this指针的类型取决于使用this指针的成员函数类型以及对...

2020-04-17 15:58:05 4662

原创 链队列的实现

#include<iostream>using namespace std;typedef struct Q//队节点{ int data; Q* next;};struct point//使用point结构保存队头和队尾的位置{ Q* front; Q* rear;};point* init(void){ Q *head = new Q; head-&...

2020-03-30 16:35:21 75

原创 顺序队列的相关操作(标志位判断)

环形队列(或循环队列,circular queue)及其基本运算的实现可以避免假溢出(false overflow)。环形队列首尾相连后,当队尾指针 rear = MaxSize - 1后,在前进一个位置就到达0,于是就可以使用另一端的空位置存放队列元素。循环队列初始时设置:front = rear = 0循环队列队满和队空的条件都是 q->rear == q->front,因...

2020-03-28 16:09:41 636

原创 迷宫c++利用栈空间回溯法

利用栈空间储存迷宫路径可以有效保证回溯上一位置时的方便和可靠性。算法最应注意的是应该在路径入栈后,设置该坐标为0(不可走),防止不停重复入栈和出栈,形成死循环。#include<iostream>using namespace std;typedef struct stack{ int arr[16][2];//使用二维数组保存路径的位置 int p;}stackt...

2020-02-24 19:11:23 274

原创 汉诺塔问题

相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、C任一杆上。分析:对于这样一个问题,任何人都不...

2020-02-24 14:18:41 111

转载 acm比赛术语

ACM/ICPC 术语:ICPC (International Collegiate Programming Contest) 国际大学生程序设计竞赛AC (Accepted) 程序通过WA (Wrong Answer) 错误的答案 (读做“哇”)PE (Presentation Error) 输出格式错误RE (Runtime Error) 程序执行错误 (常见于数组溢出、递归层数太多...

2020-02-23 13:45:32 685

原创 双端栈(顺序表实现)

俩个栈共享空间可以使用双端栈来实现,俩头为栈底,一直插入,直到中间相遇。利用率栈的“占地位置不变,而栈顶动态变化"。#include<iostream>#define M 20using namespace std;typedef struct stack{ int arr[M]; int p, q;}stacktype;//别名设置 p和q分别代表俩个栈,位于栈的俩...

2020-02-22 19:28:27 375

原创 顺序栈的应用括号匹配问题

利用编程检查这一串字符中的( ) ,[ ],{ }是否匹配解决思路:利用栈将字符串的({【依次压入栈中,然后读取到】})的时候取出一位来和栈顶判断是否相等。充分利用栈空间的特点。#include<iostream>#define M 100using namespace std;typedef struct stack{ char arr[M]; int p;}sta...

2020-02-22 16:45:53 330

原创 1+1/2+2/3+.....的c代码

#include<stdio.h>int main(void){float f,q,p,value,sum=1;p=1;q=1;int x;scanf("%d",&x);for(int i=2;i<=x;i++)//从第二次开始{f=p; //交换变量,用来保存数值p=q; //上一个的分母变分子q=f+q;//新的分母,是上一次的分子与分母相加。...

2019-09-10 22:08:40 2297

转载 浅谈指针与数组的关系

1、实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的。2、数组名是一个常量(意味着不允许对其进行赋值操作),其代表数组首元素的首地址。3、数组与指针的关系是因为数组下标操作符[],比如,int a[3][2]相当于*(*(a+3)+2) 。4、指针是一种变量,也具有类型,其占用内存空间大小和系统有关,一般32位系统下,sizeof(指针变量)=4。5、指针可以进行加减算术运算...

2019-04-16 08:53:22 2744

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除