一、vector
1.定义
vector是STL容器中的可变长度数组;
2.实现
实现需要头文件<vector>,有以下常用方法;
vector<int> v(N,i):建立一个可变长度数组v,元素类型为int;该可变数组初始有N个元素,皆初始化为i;i可以去掉,则默认为0;(N,i)也可以去掉,数组长度默认为0;元素类型可换为其他类型;
a.v.push_back(a):将元素a插入数组v的末尾,同时增加数组长度;
b.v.size():返回数组v的长度;
c.v.resize(n,m):重新调整数组长度为n,如果n大于原长度,则将新增部分初始化为m,若n小于原长度则删除多余部分;
d.vector<int>: :iterator it:定义一个名为it的迭代器
e.v.begin():返回数组v首元素(v[0])的指针(迭代器)
f.v.end():返回数组v末尾元素下一个元素的指针(迭代器),类似于空指针,不指向任何元素;
定义一个不定长的二维数组可采取嵌套的方式,如vector<vector<int> >v(注意尖括号的空格,避免被认为是移位运算符而导致编译出错)
二、栈
1.定义
栈是一种只允许在一端进行插入或删除操作的线性表。
栈顶(Top):线性表允许进行插入和删除的一端。
栈底(Bottom):固定的,不允许进行插入和删除的另一端。
空栈:不含任何元素。
如上图:a1为栈底元素,an为栈顶元素。由于栈只能在栈顶进行插入和删除操作,故进栈次序依次为a1,a2,... ,an 而出栈次序为an,...,a2,a1。栈的明显的操作特征为后进先出(Last In First Out,LIFO),故又称 后进先出的线性表。
2.实现
a.数组模拟
在使用数组模拟栈时,需要一个栈顶指针记录栈顶的位置,一般有以下几种操作;
void push(x):将x压入栈;
void pop():取出栈顶元素;
int top():访问栈顶元素;
代码如下
int stack[MAXN];//开辟栈所需要的数组空间,MAXN指栈的最大大小,题目不一定有要求栈有最大大小;
int p=0;//栈顶指针,指向下一个待插入的数组位置;
void push(int x){//压栈
if(p>=MAXN){//判断是否溢出
cout<<"Stack Overflow";
}
else{
stack[p]=x;p++;
}
}
viod pop(){//取出栈顶元素
if(p==0){//判断栈是否为空
cout<<"Stack is empty";
return -1;
}
else {
p-=1;
}
}
int top(){
if(p==0){//判断栈是否为空
cout<<"Stack is empty";
return -1;
}
else{
return stack[p-1];
}
}
b.头文件
栈的头文件是<stack>,有以下几种用法;
stack<int> s:建立一个栈s,其内部元素类型为int;
s.push(a):将元素a压入栈s;
s.pop():将s的栈顶元素弹出;
s.top():查询s的栈顶元素;
s.size():查询栈s中的·元素个数;
s.empty():查询s是否为空;
三、队列
1.定义
队列是一种“先进先出”的线性表,只允许在队列的一端进行删除运算,在另一端进行插入运算;
2.实现
a.数组模拟
使用数组模拟队列时,需要有队首指针和队尾指针,一般有以下几种操作
void push(x):将x压入队列;
void pop():取出队首元素;
int front():查询队首的元素
int queue[MAXN];//开辟栈所需要的数组空间,MAXN同上;
int head=0;//队首指针
int tail=0;//队尾指针
void push(int x){//进队
if(tail>=MAXN){//判断是否溢出
cout<<"Queue Overflow";
}
else{
queue[tail]=x;tail++;
}
}
viod pop(){//取出队首元素
if(head==0){//判断队列是否为空
cout<<"Queue is empty";
return -1;
}
else {
head-=1;
}
}
int top(){
if(head==0){//判断队列是否为空
cout<<"Queue is empty";
return -1;
}
else{
return queue[p-1];
}
}
b.头文件
队列的头文件是<queue>,有以下几种用法;
queue<int> q:建立一个队列q,内部元素类型为int
q.push(a):将a插入队列q
q.pop():删除队列q的队首元素
q.front():查询队首元素
q.back():查询队尾元素
q.size():查询q的元素个数
q.empty():查询q是否为空