【アルゴリズム学習ノート】06.データ構造基礎キューとスタック初歩
1648 ワード
キューはFIFOですが、先に出るので並んでいるのと同じです.
カードゲーム
1枚目を投げ出して新しい1枚目を最後に入れます
スタックはLIFOが最後に入った最初の外に出て、
ステーションゲーム
カードゲーム
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");
}