线性表(vector,栈,队列)

一、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.数组模拟

在使用数组模拟栈时,需要一个栈顶指针记录栈顶的位置,一般有以下几种操作;

  1. void push(x):将x压入栈;

  1. void pop():取出栈顶元素;

  1. 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>,有以下几种用法;

  1. stack<int> s:建立一个栈s,其内部元素类型为int;

  1. s.push(a):将元素a压入栈s;

  1. s.pop():将s的栈顶元素弹出;

  1. s.top():查询s的栈顶元素;

  1. s.size():查询栈s中的·元素个数;

  1. s.empty():查询s是否为空;

三、队列

1.定义

队列是一种“先进先出”的线性表,只允许在队列的一端进行删除运算,在另一端进行插入运算;

2.实现

a.数组模拟

使用数组模拟队列时,需要有队首指针和队尾指针,一般有以下几种操作

  1. void push(x):将x压入队列;

  1. void pop():取出队首元素;

  1. 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>,有以下几种用法;

  1. queue<int> q:建立一个队列q,内部元素类型为int

  1. q.push(a):将a插入队列q

  1. q.pop():删除队列q的队首元素

  1. q.front():查询队首元素

  1. q.back():查询队尾元素

  1. q.size():查询q的元素个数

  1. q.empty():查询q是否为空

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值