Upload
others
View
0
Download
0
Embed Size (px)
Citation preview
void Stack::push(int v) { // LinkedList の insert_head と同じ head = new Node(v, head);}
int Stack::pop() { // LinkedList から追加する関数 if (head != NULL) { int result = head->get_data(); Node* ptr = head; head = head->get_next(); delete ptr; return result; } return -1;}
void StackV::push(int v) { data.push_back(v);}
int StackV::pop() { if (data.size() != 0) { int v = data[data.size() - 1]; // data.back() で最後尾の要素が取得できるのでそれもOK data.pop_back(); return v; } else { return -1; }}
// queue1.cppconst int n = 8;class Queue{
private: int data[n]; int sz;
public : Queue(){ sz = 0; // コンストラクタは要素数の初期化のみ }
void enqueue(int); // 引数をqueue末尾に追加 int dequeue(); // 先頭を戻してqueueから削除 void printAll(); // 確認のために出力関数を用意します};
void Queue::enqueue(int d){
if(sz < n){ // 最大要素に満たなければ追加可能 data[sz] = d; // 最終要素に追加 sz++; } return ;}
int Queue::dequeue(){ if(sz == 0) return -1; // queue が空なら-1を戻しておく //(↑が場合によって正しくないことは前回やりました) int v = data[0]; // 配列を前にずらす for(int i = 1; i < sz; i++){ data[i - 1] = data[i]; } sz--; return v;}
void Queue::enqueue(int d){
if(sz < n - 1){ // 最大要素に満たなければ追加可能 data[sz] = d; // 最終要素に追加 sz++; } return ;}
int Queue::dequeue(){ if(sz == 0) return -1; // queue が空なら-1を戻しておく //(↑が場合によって正しくないことは前回やりました) int v = data[0]; // 配列を前にずらす for(int i = 1; i < sz; i++){ data[i - 1] = data[i]; } sz--; return v;}
」
」
」
// queue2.cppconst int n = 8;class Queue{
private: int data[n]; int sz; // 配列が埋まってる数 int idx; // 先頭は今どこ?
public : Queue(){ sz = 0; // 要素数の初期化 idx = 0; // 先頭要素は最初は0 }
// ここは変更なし void enqueue(int); // 引数をqueue末尾に追加 int dequeue(); // 先頭を戻してqueueから削除 void printAll(); // 確認のために出力関数を用意します};
void Queue::enqueue(int d){
if(sz < n){ // 最大要素に満たなければ追加可能 data[(idx+sz)%n] = d; // 最終要素に追加 sz++; } return ;}
int Queue::dequeue(){ if(sz == 0) return -1;// queue が空なら-1を戻しておく //(↑が場合によって正しくないことは前回やりました) int v = data[idx]; // idx が動く こちらも循環させる必要があります idx = (idx+1)%n; sz--; return v;}
// queue1.cppconst int n = 8;class Queue{
private: int data[n]; int sz;
public : Queue(){ sz = 0; // コンストラクタは要素数の初期化のみ }
void enqueue(int); // 引数をqueue末尾に追加 int dequeue(); // 先頭を戻してqueueから削除 void printAll(); // 確認のために出力関数を用意します};
// queue1.cppconst int n = 8;class Queue{
private: int data[n]; int sz;
public : Queue(){ sz = 0; // コンストラクタは要素数の初期化のみ }
void enqueue(int); // 引数をqueue末尾に追加 int dequeue(); // 先頭を戻してqueueから削除 void printAll(); // 確認のために出力関数を用意します};
// queue3.cppclass Node{ private : int data; Node* next; public : Node(int d, Node* n){ data = d; next = n; }
int get_data(){ return data;} void set_next(Node* n){next = n;} Node* get_next(){return next;}};
class Queue{
private: Node* head;
public : Queue(){ head = NULL; } // ここは変更なし void enqueue(int); // 引数をqueue末尾に追加 int dequeue(); // 先頭を戻してqueueから削除 void printAll(); // 確認のために出力関数を用意します};
void Queue::enqueue(int d){ // 後ろに追加してみる // リストが空なら先頭に挿入 if(head == NULL){ head = new Node(d, head); return; }
Node* ptr = head; while(ptr->get_next() !=NULL){ ptr = ptr->get_next(); }
ptr->set_next(new Node(d,NULL));
return ;}
int Queue::dequeue(){ // 先頭を戻す if(head == NULL) return -1;
int v = head->get_data(); Node* ptr = head; head = head->get_next();
delete ptr; return v;}
// queue4.cppint main(){ queue vque;
int ar[8] = {1,2,3,4,5,6,7,8};
for(int i = 0; i < 8; i++){ vque.push(ar[i]); }
cout
// queue4.cppint main(){ queue vque;
int ar[8] = {1,2,3,4,5,6,7,8};
for(int i = 0; i < 8; i++){ vque.push(ar[i]); }
cout