zoukankan      html  css  js  c++  java
  • 【算法学习笔记】06.数据结构基础 队列与堆栈初步

    队列是FIFO,因为先进先出,和排队一样。

    卡牌游戏

    扔出第一张并把新的第一张放入最后 

     
    //int q[100]={1,2,3,4,5,6,7};
    int q[100];
    void c()
    {
    	int front,rear;
    	//front是第一个元素,rear是最后一个元素的后一个位置
    	front=0;
    	rear=7; 
    	while(front<rear) //当且仅当 
    	{
    		printf("%d",q[front]);//输出第一个元素			
    		front++;//向后推移一位= 抛弃了第一张牌 
    		q[rear]=q[front];//将当前的第一张牌扔到最后面去 
    		rear++;//此时最后一张牌已经发生了改变 
    		front++;//继续抛弃,这回的抛弃是因为此牌已经移开
    		//直到 front = rear 因为f每次增2 r每次增1,所以应该会执行n次 
    	}
    
    }
    
    void cpp()
    {
    	queue<int> q;//声明一个队列 
    	for(int i=1;i<=7;i++)
    		q.push(i);
    	while(!q.empty())
    	{
    		cout<<q.front();
    		q.pop();
    		q.push(q.front());
    		q.pop();
    	}
    
    } 

    堆栈是LIFO 最后一个进入的第一个出去,

    车站游戏


    int n=5,target[1000]={0,3,2,1,5,4};
    
    void c()
    {
    	int stack[1000],top=0;
    	//stack是栈,用于临时存车
    	//top是指向栈顶的符号,如果top=0则说明栈内无元素
    	int A=1,B=1;// A表示正在从A进入栈的车号 也是入栈的次数
    	//B 表示即将要进入B站的车的序列号 target[B] 是车号 
    	int ok=1;//标识
    	
    	while(B<=n) //当B=n时说明已经完全出站 
    	{
    		//目标是出站,所以有限考虑能否出战 
    		if(A==target[B])//此处往往是出站的转折点 此时进入的车正好是要出去的车 
    		{ A++;B++;} //继续进车 继续出车 
    		else if(top&&stack[top]==target[B])//继续出站 
    		{ top--;B++;}
    		else if(A<=n)//如果暂时不能出站就进站 
    		{ stack[++top]=A++;}		
    		else
    		{ok=0;break;}
    	} 
    	printf("%s
    ",ok?"Yes":"No");
    }
    
    int main()
    {
    	stack<int> s;
    	int A=1,B=1;
    	int ok=1;
    	
    	while(B<=n)
    	{
    		if(A==target[B])
    		{A++;B++;}
    		else if(!s.empty()&&s.top()==target[B])//empty判断是否空 top 取最顶的元素 
    		{s.pop();B++;}//pop 出栈 
    		else if(A<=n)
    		{s.push(A++);}//push入栈 
    		else
    		{ok=0;break;}
    	}
    	printf("%s
    ",ok?"Yes":"No"); 
    } 


  • 相关阅读:
    20190613 安装Anaconda
    20190613 一个SQL问题
    20190604 宠物引发的乱想
    windows下的vim打开文件乱码解决
    【题解】 「NOI2019」弹跳 KDT优化建图+最短路+剪枝+卡空间 LOJ3159
    【题解】 [AH/HNOI2017]单旋 LCT+splay
    【题解】 CF1400E Clear the Multiset 笛卡尔树+贪心+dp
    【题解】 CF1404C Fixed Point Removal 线段树+树状数组+带悔贪心
    【题解】 CF1251E2 Voting (Hard Version) 带悔贪心
    【题解】 CF1418G Three Occurrences hash+双指针+差分
  • 原文地址:https://www.cnblogs.com/yuchenlin/p/4379268.html
Copyright © 2011-2022 走看看