c++ 数据结构-栈,队列 小总结

之前学习了一些栈,队列的知识点,在此做一个小总结。

栈和队列都属于线性表。线性表由多个类型相同的数据连在一起,每个元素有前驱(就是前一个元素)后继(就是后一个元素)。他们可以用来解决不同的问题。

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():查询队尾的元素。

如果大家有其他想法的,可以补充。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值