之前学习了一些栈,队列的知识点,在此做一个小总结。
栈和队列都属于线性表。线性表由多个类型相同的数据连在一起,每个元素有前驱(就是前一个元素)后继(就是后一个元素)。他们可以用来解决不同的问题。
栈
1.栈的定义:
当我们在洗盘子的时候,一般放在越底下的盘子越晚洗,也就是说,如果a比b早加入,那么a就会比b后退出,这种数据结构就是栈。栈是一种后进先出表(last in first out,LIFO),只能在栈的一端进行插入和删除运算,进行这些运算的这一端叫做“栈顶”。
2.栈的使用:
<1>数组使用:
一般用数组来存储栈。一般使用栈时会用到几个功能:
1.将某个元素压入栈。
2.弹出栈顶的元素。
3.查询栈顶的元素。
4.查询栈中元素的个数。
使用数组可以这样实现:
数据类型 a[1000005];
int jilu=0; //栈顶指针(栈内元素数量)
void push(数据类型 x){
//压栈
jilu++;
a[jilu]=x;
return;
}
void pop(){
//弹出栈顶
if(!jilu)cout<<"Empty"<<endl;
else {
jilu--;
}
return;
}
void query(){
//输出栈顶
if(!jilu)cout<<"Anguei!"<<endl;
else cout<<a[jilu]<<endl;
return;
}
void size(){
//输出个数
cout<<jilu<<endl;
return;
}
//此处有判断栈是否为空
<2>STL使用:
当然,我们也可以使用STL提供的stack,头文件是<stack>,有以下几个使用功能:
(1)stack<数据类型(可以是结构体)> s:定义一个栈s。
(2)s.push(a):将某个元素压入栈。
(3)s.pop():弹出栈顶的元素。
(4)s.top():查询栈顶的元素。
(5)s.size():查询栈中元素的个数。
(6)s.empty():查询栈内是否为空。
队列
1.队列的定义:
当我们在排队的时候,一般越早排队越先排完,也就是说,如果a比b早加入,那么a就会比b先退出,这种数据结构就是队列。队列是一种先进先出表(first in first out,FIFO),只能在队列的一端进行插入,另一端进行删除运算,进行插入运算的一端叫做“队尾”,进行删除运算的一端叫做“队首”。
2.队列的使用:
<1>数组使用:
一般用数组来存储队列。一般使用队列时会用到几个功能:
1.将某个元素压入队列。
2.弹出队首的元素。
3.查询队首的元素。
4.查询队列中元素的个数。
使用数组可以这样实现:
数据类型 a[1000005];
int jilu=0,jilu2=0;
//队尾指针,队首指针
void push(数据类型 x){
//将某个元素压入队列
jilu++;
a[jilu]=x;
return;
}
void pop(){
//弹出队首的元素
if(!(jilu-jilu2))cout<<"ERR_CANNOT_POP"<<endl;
else {
jilu2++;
}
return;
}
void query(){
//查询队首的元素
if(!(jilu-jilu2))cout<<"ERR_CANNOT_QUERY"<<endl;
else cout<<a[jilu2+1]<<endl;
return;
}
void size(){
//查询队列中元素的个数
cout<<jilu-jilu2<<endl;
return;
}
<2>STL使用:
当然,我们也可以使用STL提供的queue,头文件是<queue>,有以下几个使用功能:
(1)queue<数据类型(可以是结构体)> q:定义一个栈q。
(2)q.push(a):将某个元素压入队列。
(3)q.pop():弹出队首的元素。
(4)q.front():查询队首的元素。
(5)q.size():查询队列中元素的个数。
(6)q.empty():查询队列内是否为空。
(7)q.back():查询队尾的元素。
如果大家有其他想法的,可以补充。

被折叠的 条评论
为什么被折叠?



