数据结构----(栈,队列)c++/c#分别实现
1.受限的线性表:栈和队列;
2.栈:先进后出,类似于箱子。(FILO结构)
3.队列:先进先出,类似于排队。(FIFO结构)
1:c++
(c++)引用命名空间
#include<stack>
#include<queue>
栈的方法
- push : 进栈
- pop :出栈
- top :返回栈顶元素
- size :栈的大小
- empty :栈是否为空
队列方法
- push:进队
- pop :出队
- front :返回第一个元素
- empty :队列是否为空
- size :队的大小
- back :返回队列最后一个元素
实例1:队列翻转
思路 :采用一个栈作为中间容器中转
// 定义一个队列,存储int类型的元素
queue<int> q;
stack<int> s;
// 将1-10入队
for(int i = 1;i <= 10;i++)
{
q.push(i);
}
// 翻转队列
while(!q.empty())
{
s.push(q.front());
q.pop();
}
while(!s.empty())
{
q.push(s.top());
s.pop();
}
while(!q.empty())
{
cout << q.front() << endl;
q.pop();
}
实例2:2个队列实现栈
思路:设定两个队列,进栈的时候,都放到一个队列中,出栈的时候,
先把上面多余的移动到第二个队,保留一个,再把保留一个出队列,再把第二个队列移动到第一个队列
queue<int> Queue1;
queue<int> Queue2;
//进栈
void 2queuqToStackPush(int value)
{
Queue1.push(value);
}
//出栈
void 2queuqToStackPop(int value)
{
while(Queue1.size()>1)
{
Queue2.push(Queue1.front());
Queue1.pop();
}
Queue1.pop();
while(!Queue2.empty())
{
Queue1.push(Queue2.front());
Queue2.pop();
}
}
//栈是否为空
bool empty()
{
return Queue1.empty();
}
//返回栈顶元素
int top()
{
return Queue1.back();
}
//栈的元素个数
int size()
{
return Queue1.size();
}
实例3:2个栈实现队列
思路:跟前面也是一样,创建两个栈,进队就是把数据先全部存放到第一个栈,出队列就是,
先把第一个栈的元素依次出栈,再进栈到第二个栈中,然后第二个栈移除栈顶元素就是出队列了,
然后在把第二个栈依次出栈再进栈到第一个栈,这样就完成了出队列
stack<int> Stack1;
stack<int> Stack2;
//进队
void push(int value)
{
Stack1.push(value);
}
//出队
void pop()
{
while(!Stack1.empty())
{
Stack2.push(Stack1.top());
Stack1.pop();
}
Stack2.pop();
while(!Stack2.empty())
{
Stack1.push(Stack2.top());
Stack2.pop();
}
}
//队列是否为空
bool empty()
{
return Stack1.empty();
}
//队列里面元素个数
int size()
{
return Stack1.size();
}
//返回最后一个元素
int& back()
{
return Stack1.top();
}
//返回第一个元素
int& front()
{
int temp;
while(!Stack1.empty())
{
Stack2.push(Stack1.top());
Stack1.pop();
}
temp=Stack2.top();
while(!Stack2.empty())
{
Stack1.push(Stack2.top());
Stack2.pop();
}
return temp;
}
2:c#
栈的方法
- push : 进栈
- pop :出栈
- Peek :返回栈顶元素,但不删除
- ToArray:把栈里的元素复制到一个数组中
- Contains :判断某个元素是否在栈中
- Clear :清除栈中的所有元素
队列方法
- Enqueue:进队,在末尾添加元素
- Dequeue:出队,队头出队列
- Contains :判断一个元素是否在队列中
- Clear:清空队列所有元素
- TrimToSize :队的大小
- ToArray :队列元素拷贝到数组