栈与队列
程序员文章站
2022-05-23 23:14:49
...
栈
1.栈是一种线性存储结构,元素遵循“先进后出”,并且只能在栈顶进行插入和删除,
2、栈的相关概念:
(1)栈顶与栈底:允许元素插入与删除的一端称为栈顶,另一端称为栈底
(2)压栈:栈的插入操作,叫做进栈,也称压栈、入栈。
(3)弹栈:栈的删除操作,也叫做出栈。
3、栈的常用操作为:
(1)弹栈,通常命名为pop
(2)压栈,通常命名为push
(3)求栈的大小
(4)判断栈是否为空
(5)获取栈顶元素的值
s.empty(); //如果栈为空则返回true, 否则返回false;
s.size(); //返回栈中元素的个数
s.top(); //返回栈顶元素, 但不删除该元素
s.pop(); //弹出栈顶元素, 但不返回其值
s.push(); //将元素压入栈顶
队列
另一种线性存储结构–队列。他的元素遵循“先进先出”,队首删除,队尾插入
队列在数据结构中分为普通队列和环形队列。首先说说普通队列,就是一种类似隧道的数据结构,对于队列里的数据,是先入先出,这点和栈相反。但是普通队列有些缺点,下面来说说普通队列缺点。
普通队列的数据从对头开始离开的时候,后面一个内存空间会变为新的队头,那么对头离开后剩下的内存空间就被剩下了,这就让内存空间利用率不高。但是环形队列就可以很好的解决这个问题,但是有点难哈。
环形队列就是一个换,这个环里可以分配内存空间,数据在环里进行排队,对头删了,又可以加上新的数据变为队伟,这样内存的使用率就增加了
class Qu
{
public:
Qu(int QueueCapaticy);//构造函数来产生一个内存空间,用来存放队列
void clearQu();//清楚队列里的数据
bool emptyQu() const;//判断队列是否为空队列
int QuLen();//返回值为队列长度
bool enterQu(int element);//数据进入队列
bool deleteQu(int element);//删除队列里的数据
bool fullQu();//判断队列是否满状态,满了就不能插入数据了
void travelQu();//遍历数列里的数据
private:
int m_iQueueCapaticy;//队列存储内存空间大小
int m_iQueueLen;//记录队列长度
int m_iHead;//队列头
int m_iTail;//队列尾
int* m_pQueue;//队列指针
};