[規格C+]10866インデックス
質問する
整数を格納するスタックを実装し、入力としてのコマンドを処理するプログラムを作成します.
命令は全部で5種類ある.
push X:整数Xをスタックに入れる演算.
pop:スタックの一番上の整数を除去し、出力します.スタックに整数がない場合は、-1が出力されます.
size:スタック内の整数の個数を出力します.
空:スタックが空の場合、1または0が出力されます.
top:スタックの一番上の整数を出力します.スタックに整数がない場合は、-1が出力されます.
入力
1行目に与えられるコマンド数N(1≦N≦10000).2行目からN行目までそれぞれ1つのコマンドがあります.与えられた整数は1以上であり、100000以下である.問題にない命令はない.
しゅつりょく
出力するコマンドが発行されるたびに、各行に1つのコマンドが出力されます.
https://www.acmicpc.net/problem/10828
に答える
ポインタを使用してノード単位でインデックスを作成します.
まずノードクラスです.
prevでは、次のポインタが隣接ノードに接続されます.
次はdexクラス本体です.
JENERICタイプを使用してノードとインデックスクラスを実装し、ジェネレータはJENERICを使用しません. push_front/push_back
最初にインデックスにデータを格納すると、1回の処理は1つの末尾ノードと1つのヘッダノードと同じです.
データがインデックス内にある場合、ヘッダポインタは前の最上位ノードを指し、そのノードの次のノードを新しく作成したノードとして指定します.
困難なノードをノードにリセットするプロセス. pop_front/pop_back
各ヘッドノードとテールノードを削除するノードとして指定します.
各前のノード、次のノードをヘッドノード、テールノードにリセットします. empty/size/front/back
最後の入力部
%sで受信した文字列とstrcmpで受信した文字列を比較した.
整数を格納するスタックを実装し、入力としてのコマンドを処理するプログラムを作成します.
命令は全部で5種類ある.
push X:整数Xをスタックに入れる演算.
pop:スタックの一番上の整数を除去し、出力します.スタックに整数がない場合は、-1が出力されます.
size:スタック内の整数の個数を出力します.
空:スタックが空の場合、1または0が出力されます.
top:スタックの一番上の整数を出力します.スタックに整数がない場合は、-1が出力されます.
入力
1行目に与えられるコマンド数N(1≦N≦10000).2行目からN行目までそれぞれ1つのコマンドがあります.与えられた整数は1以上であり、100000以下である.問題にない命令はない.
しゅつりょく
出力するコマンドが発行されるたびに、各行に1つのコマンドが出力されます.
https://www.acmicpc.net/problem/10828
に答える
ポインタを使用してノード単位でインデックスを作成します.
まずノードクラスです.
prevでは、次のポインタが隣接ノードに接続されます.
次はdexクラス本体です.
JENERICタイプを使用してノードとインデックスクラスを実装し、ジェネレータはJENERICを使用しません.
最初にインデックスにデータを格納すると、1回の処理は1つの末尾ノードと1つのヘッダノードと同じです.
データがインデックス内にある場合、ヘッダポインタは前の最上位ノードを指し、そのノードの次のノードを新しく作成したノードとして指定します.
困難なノードをノードにリセットするプロセス.
各ヘッドノードとテールノードを削除するノードとして指定します.
各前のノード、次のノードをヘッドノード、テールノードにリセットします.
%sで受信した文字列とstrcmpで受信した文字列を比較した.
#define _CRT_SECURE_NO_WARNINGS
#include <bits/stdc++.h>
//제네릭타입으로 구현
template <typename T>
class Node {
public:
T data = NULL;
Node<T>* prev = nullptr, * next = nullptr;
//생성자에는 제네릭X
Node(T data,
Node<T>* prev = nullptr,
Node<T>* next = nullptr)
: data(data), prev(prev), next(next) {}
};
template <typename T>
class Deque {
private:
int dataSize = 0;
Node<T>* tail = nullptr, * head = nullptr;
public:
//생성자에는 제네릭X
Deque() {}
~Deque() {}
void push_front(const T data);
void push_back(const T data);
T pop_front();
T pop_back();
T front() const;
T back() const;
bool empty() const;
int size() const;
};
template <class T>
void Deque<T>::push_front(const T data) {
if (empty()) {
head = new Node<T>(data);
tail = head;
}
else {
Node<T>* newNode = new Node<T>(data, head, nullptr);
head->next = newNode;
head = newNode;
}
dataSize++;
}
template <class T>
void Deque<T>::push_back(const T data) {
if (empty()) {
head = new Node<T>(data);
tail = head;
}
else {
Node<T>* newNode = new Node<T>(data, nullptr, tail);
tail->prev = newNode;
tail = newNode;
}
dataSize++;
}
template <class T>
T Deque<T>::pop_front() {
if (empty())
return -1;
T data = front();
Node<T>* delNode = head;
head = head->prev;
delete delNode;
dataSize--;
if (dataSize == 0)
head = nullptr;
return data;
}
template <class T>
T Deque<T>::pop_back() {
if (empty())
return -1;
T data = back();
Node<T>* delNode = tail;
tail = tail->next;
delete delNode;
dataSize--;
if (dataSize == 0)
tail = nullptr;
return data;
}
template <class T>
bool Deque<T>::empty() const {
return dataSize == 0;
}
template <class T>
int Deque<T>::size() const {
return dataSize;
}
template <class T>
T Deque<T>::front() const {
if (empty())
return -1;
return head->data;
}
template <class T>
T Deque<T>::back() const {
if (empty())
return -1;
return tail->data;
}
int main(int n, int num) {
scanf("%d", &n);
Deque<int> d;
for (int i = 0; i < n; i++) {
char c[12]; //정수앞 공백까지 11자 + \0 = 12
scanf("%s", c);
if (!strcmp(c, "push_front")) {
scanf("%d", &num);
d.push_front(num);
}
else if (!strcmp(c, "push_back")) {
scanf("%d", &num);
d.push_back(num);
}
else if (!strcmp(c, "pop_front")) {
printf("%d\n", d.pop_front());
}
else if (!strcmp(c, "pop_back")) {
printf("%d\n", d.pop_back());
}
else if (!strcmp(c, "size")) {
printf("%d\n", d.size());
}
else if (!strcmp(c, "empty")) {
printf("%d\n", d.empty() ? 1 : 0);
}
else if (!strcmp(c, "front")) {
printf("%d\n", d.front());
}
else if (!strcmp(c, "back")) {
printf("%d\n", d.back());
}
}
return 0;
}
Reference
この問題について([規格C+]10866インデックス), 我々は、より多くの情報をここで見つけました https://velog.io/@cldhfleks2/10866テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol