【アルゴリズム学習ノート】06.データ構造基礎キューとスタック初歩

1648 ワード

キューはFIFOですが、先に出るので並んでいるのと同じです.
カードゲーム
1枚目を投げ出して新しい1枚目を最後に入れます
 
//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"); }