数据结构(c++、c#)---栈,队列

数据结构----(栈,队列)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 :队列元素拷贝到数组
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值