先补充点结构体、指针、引用、堆栈基本知识
结构体概念:特殊的类(需要表示一组集成的数据,不需要用函数计算)
定义:
struct 机构体名{
公有成员
protected:
保护成员
private:
私有成员}
注:结构体的成员既可以是数据成员也可以是函数成员
内存空间的访问形式:
通过变量名访问/通过地址访问
指针概念:内存地址,用于间接访问内存单元(所以我们在指针中可以存放其他变量的地址可以存放其他代码的地址---就是所指针里容纳的是所指向data的地址,它本身也是占内存空间的)
例子:static int i;(假设i的地址是2000)
static int* ptr = &i (这里ptr的初始化就是2000,这里的*代表指针,int代表指向的对象类型)
使用:指针运算是个寻找地址的过程
如:*ptr = 3---先寻到地址2000,把3放到2000处,即i= 3,这里的3 放进去占有的字节数就等于定义的对象类型字节数,这里之前定义的是int 所以3 就占用4个字节
所以这个运算分两步寻址、赋值
引用基本概念:引用只是别名,不是实体类型(也就是说c++编译器不为引用单独分配内存空间),对一个对象的引用,就是直接对这个对象的操作
使用:
1、引用必须初始化(引用必须指向所引用的对象)
int a = 3;
int& ra = a;
int &b ;//错误,引用必须初始化
const int &b = 10;//正确对字面值常量10的引用
2、引用不能为空
int &b ;//错误,引用不能为空必须有所引用的对象
3、引用不能更换目标
#includeusing namespace std;int main(void){
int a = 3;
int b = 4;
int& ra = a;
// int& ra = b;//错误,多次初始化 return 0;
}
辨析:引用和指针的联系和区别
1、存在空指针,但是不存在空引用
void * a;//空指针,合法//
void& b;//空引用,不合法
2、但是指针可以不初始化,而引用必须初始化
3、存在指针数组 ,不存在引用数组
int* a[3] ={&x,&y,&z };//定义了一个有三个整形指针变量的指针数组 a ,合法 //
int& a [3] ={x,y ,z};//报错,不允许使用引用数组,因为引用没有内存的分配
栈:是一种只能从一端访问的线性群体,是后进先出的数据结构
这里注意的是优先级高的可以入栈
基本操作:初始化、入栈、出栈、清空栈、访问栈顶,检测栈状态
这里从top指向栈顶,push压入栈函数,pop弹出栈函数 ,清空栈clear函数,peek读取栈顶元素不删除它,还有判断栈是否empty是否full函数
这里构造函数stack将指针top函数置成-1(初始状态)
push将数据&item压如栈里,先判断栈不满的情况下,top函数+1指向下一个可用的空间,将item放进去,出栈返回栈顶元素同理
判断栈空、满、清空的基本设置