线性表
文章目录
一. vector数组
1.1定义
vector又称可变长数组,定义在 < vector> 头文件中,vector容器是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新的元素。因此vector的运用对于内存的合理利用与运用的灵活性有很大的帮助。
1.2实现方式
定义方式以及常用的内置函数如下:
vector<int> v; // 定义一个vector,其中的元素为int类型
vector<int> v[N]; // 定义一个vector数组,其中有N个vector
vector<int> v(len); // 定义一个长度为len的vector
v.push_back(x); // 在vector的尾部插入元素x
v.pop_back(); // 删除vector的最后一个元素)
v.size(); // 返回vector中元素的个数
v.empty(); // 返回vector是否为空,若为空则返回true否则返回false
v.front(); // 返回vector中的第一个元素
v.back(); // 返回vector中的最后一个元素
v.begin(); // 返回vector第一个元素的迭代器
v.end(); // 返回vector最后一个元素后一个位置的迭代器
v.clear(); // 清空vector
v.erase(v.begin()); // 删除迭代器it所指向的元素,即删除第一个元素
二. 栈
2.1 定义
stack又称栈,是一种后进先出的数据结构,定义在头文件中,stack不允许有遍历行为,除了最顶端以外,没有任何方法可以存取stack的其它元素。
2.2 实现方式
2.2.1 数组模拟
int stack[MAXN]; // 开辟栈需要的数组空间
int p = 0; // 栈顶指针,指向下一个待插入的数组位置
void push(int x) // 压栈,需要判断栈是否溢出
{
if(p >= MAXN)
ptintf("Stack overflow !");
else
stack[p] = x;
p += 1;
}
void pop() // 弹出栈顶元素
{
if(p == 0) // 需要判断栈是否为空
printf("Stack is empty.");
else
p -= 1;
}
int top() // 查询栈顶元素
{
if(p == 0) // 需要判断栈是否为空
{
printf("Stack is empty.");
return -1;
}
else
return stack[p-1]; // 返回栈顶元素
}
2.2.2 STL
stack<int> s; // 定义一个stack,其中元素的类型为int
stack<int> s[N]; // 定义一个stack数组,其中有N个stack
s.push(x); // 在stack中插入元素x
s.pop(); // 弹出stack的栈顶元素
s.top(); // 返回stack的栈顶元素
s.size(); // 返回stack中元素的个数
s.empty(); // 返回stack是否为空,若为空则返回true否则返回false
三. 队列
3.1 定义
queue又称队列,是一种先进先出的数据结构,定义在头文件中,queue容器允许从一端(称为队尾)新增元素(入队),从另一端(称为队头)移除元素(出队)。
3.2 实现方式
3.2.1 数组模拟
int queue[MAXN];
int head = 0;
int tail = 0;
void push(int x)
{
if(tail >= MAXN)
printf("Queue overflow");
else
queue[tail] = x;
tail += 1;
}
void pop()
{
if(head == tail)
printf("Queue is empty");
else
head += 1;
}
int front()
{
if(head == tail)
{
printf("queue is empty");
return -1;
}
else
return queue[head];
}
3.2.2 STL
queue<int> que; // 定义一个queue,其中元素的类型为int
queue<int> que[N]; // 定义一个queue数组,其中有N个queue
que.push(x); // 在queue的队尾插入元素x
que.pop(); // 出队queue的队头元素
que.front(); // 返回queue的队头元素
que.back(); // 返回queue的队尾元素
que.size(); // 返回queue中元素的个数
que.empty(); // 返回queue是否为空,若为空则返回true否则返回false