創造を続け、成長を加速させましょう!「ナゲッツデイリーニュープラン・6月アップデートチャレンジ」に参加して2日目です。クリックしてイベントの詳細をご覧ください。
序文
23 King's Roadのデータ構造で放課後のすべてのコード演習の実装を更新する予定です。試験は通常擬似コードで記述されていますが、強迫観念の乱れのためにすべて実装しました。倉庫はここにあります。
コードはC++で記述されており、暴力的な解決策や可能な限り最適な解決策を含め、すべてをコンパイルして実行できます(試験時間が十分でない場合は、暴力的なものを直接攻撃でき、半分以上を取得できますポイントの)。
継続的な更新、現在の更新の進行状況:
- 線形表14/14
- リンクリスト25/25
- スタック3/3
- キュー4/4
- スタックとキューの適用
- ..。
参考まで!試験で書くことが許されていない文法があり、間違いがあるかもしれません。
3.2.6、1
- チームが空です:
Q.front == Q.rear && Q.tag == 0
- チームフル:
Q.front == Q.rear && Q.tag == 1
- チームに入るだけでチームは満員になるので、チームに入るときはタグを1に設定し、チームを出るときも同様にタグを0に設定します。
bool enqueue(Queue &Q, int x) {
if (Q.front == Q.rear && Q.tag == 1) {
cout << "队列满" << endl;
return false;
}
Q.data[Q.rear] = x;
Q.rear = (Q.rear + 1) % maxsize;
Q.tag = 1;
return true;
}
bool dequeue(Queue &Q, int &x) {
if (Q.front == Q.rear && Q.tag == 0) {
cout << "队列空" << endl;
return false;
}
x = Q.data[Q.front];
Q.front = (Q.front + 1) % maxsize;
Q.tag = 0;
return true;
}
复制代码
2
- チーム内の要素はデキューされ、スタックに1つずつプッシュされます。次に、すべての要素がスタックにプッシュされ、スタックから1つずつキューにプッシュされます。
- 非常に簡単な質問は、「先入れ先出し」と「後入れ先出し」の性質を調べることです。
void reverseQueue(Queue &Q, Stack &S) {
int x;
while (!isEmpty(Q)) {
dequeue(Q, x);
push(S, x);
}
while (!isEmpty(S)) {
pop(S, x);
enqueue(Q, x);
}
}
复制代码
3
- S1のスタックは、キューに入るのに使用されます。S1がいっぱいで、S2が空の場合、S1の要素をS2に挿入できます。
- S2のポップはキューとして使用されます。S2が空の場合は、S1のすべての要素をS2に挿入します。
- 空は、両方のスタックが空であるかどうかを判断するだけで済みます
bool Enqueue(Stack &S1, Stack &S2, int x) {
if (!StackOverflow(S1)) {
Push(S1, x);
return true;
}
if (StackOverflow(S1) && !StackEmpty(S2)) {
cout << "队列满" << endl;
return false;
}
// S1满且S2空,先将S1中的元素全部入S2,再入S1
while (!StackEmpty(S1)) {
int tmp;
Pop(S1, tmp);
Push(S2, tmp);
}
Push(S1, x);
return true;
}
bool Dequeue(Stack &S1, Stack &S2, int &x) {
if (!StackEmpty(S2)) {
Pop(S2, x);
return true;
}
if (StackEmpty(S1)) {
cout << "队列空" << endl;
return false;
}
// S2为空且S1不为空
while (!StackEmpty(S1)) {
int tmp;
Pop(S1, tmp);
Push(S2, tmp);
}
Pop(S2, x);
return true;
}
bool QueueEmpty(Stack S1, Stack S2) {
return StackEmpty(S1) && StackEmpty(S2);
}
复制代码
4
- たとえば、チェーンストレージ構造を選択する必要があります。これは、ヘッドとテールのポインタ(ヘッドフロント、テールリア)を含む単一の循環リンクリストです。
- 空の状態
front == rear
- チーム全体の状態
front == rear -> next
- 「完全な判断、空の判断」の原則に従い、擬似コードを書くだけです