栈
栈的定义
栈(Stack)是只允许在一端进行插入或删除操作的线性表
栈的操作
- 用数组模拟栈
从0开始
top=0; //初始化
top //元素个数
if(top==0) //判断栈为空
st[top++]=x //入栈
top-- //出栈
st[top-1] //取栈顶
从-1开始
top=-1; //初始化
top+1 //元素个数
if(top==-1) //判断栈为空
st[++top]=x //入栈
top-- //出栈
st[top] //取栈顶
- STL栈
//STL栈
stack<int > st;
st.push() //入栈
st.pop() //出栈
st.top() //取栈顶
st.empty() //判断栈为空
st.size() //元素个数
链表
链表的定义
链表(list)是一种物理存储单元上非连续的存储结构,数据元素的逻辑顺序是通过链表中的指针链接实现的
链表的组成:链表由一系列结点组成
结点的组成:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域
由于链表的存储方式并不是连续的内存空间,因此 链表list中的迭代器只支持前移和后移,属于双向迭代器
链表的操作
- 用数组模拟链表
//数组链表
void push_front(int x) //头插
{
ver[++tot]=x;
nxt[tot]=head;
head=tot;
}
void push_back(int x,int k) //尾插
{
ver[++tot]=x;
nxt[tot]=nxt[k];
nxt[k]=tot;
}
void erase(int x) //删除
{
nxt[x]=nxt[nxt[x]];
}
STL链表
//STL链表
list<int > l //定义
l.push_back(elem); //在容器尾部加入一个元素
l.pop_back(); //删除容器中最后一个元素
l.push_front(elem); //在容器开头插入一个元素
l.pop_front(); //从容器开头移除第一个元素
l.insert(pos,elem); //在pos位置插入elem元素的拷贝,返回新数据的位置。
l.insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。
l.insert(pos,beg,end); //在pos位置插入,[beg,end)区间的数据(包含开头,不含结尾),无返回值。
l.clear(); //移除容器的所有数据
l.erase(beg,end); //删除[beg,end)区间的数据,返回下一个数据的位置。
l.erase(pos); //删除pos位置的数据,返回下一个数据的位置。
l.remove(elem); //删除容器中所有与elem值匹配的元素。
l.size(); //返回链表内的元素个数
l.empty(); //判断容器是否为空
l.front(); //返回第一个元素。
l.back(); //返回最后一个元素。