【データ構造---21】スタックでキューの操作を行う
13738 ワード
テーマの説明:
スタックを使用してキューの次の操作を実行します.
説明:
考え方の分析:
1.2つのスタックを使って列のシミュレーションを完成する.1つのスタックは中継要素を補助するために用いられ、1つのスタックは主にデータを保存するために用いられる.3.入隊操作はすべてs 1に対して行い、出隊操作はまずs 1の要素をs 2に押し込んで、s 2のスタックの一番上はチームヘッドであり、値を保存してから削除し、s 2の要素を全部s 1に移動し、元の構造4を回復する.s 2のスタックトップ要素を削除しないだけでいいです.
コードの実装:
スタックを使用してキューの次の操作を実行します.
push(x) --
pop() --
peek() --
empty() --
例:MyQue queue=new MyQue()queue.push(1)queue.push(2)queue.peek()///は、1 queue.pop()//を返します.は、1 queue.empty()//を返します.falseを返します説明:
-- push to top, peek/pop from top, size, is empty
list deque( ) ,
( , pop peek )
まず必要なスタックを構築します.C言語で動的スタックを実現します.考え方の分析:
1.2つのスタックを使って列のシミュレーションを完成する.1つのスタックは中継要素を補助するために用いられ、1つのスタックは主にデータを保存するために用いられる.3.入隊操作はすべてs 1に対して行い、出隊操作はまずs 1の要素をs 2に押し込んで、s 2のスタックの一番上はチームヘッドであり、値を保存してから削除し、s 2の要素を全部s 1に移動し、元の構造4を回復する.s 2のスタックトップ要素を削除しないだけでいいです.
コードの実装:
typedef struct
{
Stack s1;
Stack s2;
} MyQueue;
/** Initialize your data structure here. */
MyQueue* myQueueCreate()
{
MyQueue* SQ=(MyQueue*)malloc(sizeof(MyQueue));
if(SQ==NULL)
{
assert(0);
}
StackInit(&SQ->s1);
StackInit(&SQ->s2);
return SQ;
}
/** Push element x to the back of queue. */
void myQueuePush(MyQueue* obj, int x)
{
StackPush(&obj->s1,x);
}
/** Removes the element from in front of queue and returns that element. */
int myQueuePop(MyQueue* obj)
{
// Pop ,
while(obj->s1.top>0)
{
StackPush(&obj->s2,StackTop(&obj->s1));
StackPop(&obj->s1);
}
int a=StackTop(&obj->s2);
StackPop(&obj->s2);
//
while(obj->s2.top>0)
{
StackPush(&obj->s1,StackTop(&obj->s2));
StackPop(&obj->s2);
}
return a;
}
/** Get the front element. */
int myQueuePeek(MyQueue* obj)
{
while(obj->s1.top>0)
{
StackPush(&obj->s2,StackTop(&obj->s1));
StackPop(&obj->s1);
}
int a=StackTop(&obj->s2);
//
while(obj->s2.top>0)
{
StackPush(&obj->s1,StackTop(&obj->s2));
StackPop(&obj->s2);
}
return a;
}
/** Returns whether the queue is empty. */
bool myQueueEmpty(MyQueue* obj)
{
if(StackEmpty(&obj->s2) == -1 && StackEmpty(&obj->s1) == -1)
{
return true;
}
return false;
}
void myQueueFree(MyQueue* obj)
{
free(obj);
obj=NULL;
}
/**
* Your MyQueue struct will be instantiated and called as such:
* MyQueue* obj = myQueueCreate();
* myQueuePush(obj, x);
* int param_2 = myQueuePop(obj);
* int param_3 = myQueuePeek(obj);
* bool param_4 = myQueueEmpty(obj);
* myQueueFree(obj);
*/