[WP]no.012 C++ stack,queue

weekly programingの1週間の定義が曖昧に

コレクションが気に入らなかったので自作した。

途中からやっぱりC++の仕様に嫌気が差したので雑仕様。C言語脳です
ポインタで操作。参照型を使わざるを得ない、という状況ではないと思うので。
operator []は参照型の方が良かったかもしれません。

テンプレート型は分割コンパイルできないんですね。ヘッダに中身を書く必要があります。


自分でこのプログラムを使うか?と言われたら使いませんけどね…もう少し改良が必要かもしれません…

読まない方が良いと思います



#ifndef __DATASTRUCT_SQ
#define __DATASTRUCT_SQ

template <typename T>
class List{
private:

struct le{
T elem;
struct le *next;
le(T e,struct le *n):elem(e),next(n){}
}*head,*tail;

int num;

public:
List();
~List();

void Push(T);
T Pop();
void TailPush(T);
T* Head();
T* Tail();
int Size();
T* operator [](int i);

};


template <typename T>
List<T>::List(){
head=NULL;
tail=NULL;
num=0;
}

template <typename T>
List<T>::~List(){
while (head!=nullptr){
tail = head->next;
delete head;
head = tail;
}
return;
}

template <typename T>
void List<T>::Push(T e){
if (head==nullptr){
head = new struct le(e,nullptr);
tail=head;
}else{
head = new struct le(e,head);
}
num++;
return;
}
template <typename T>
T List<T>::Pop(){
if (head==nullptr) return (T)NULL;
T r =head->elem;
le *l=head->next;
num--;
delete head;
head=l;
if (head==nullptr) tail=nullptr;
return r;
}
template <typename T>
void List<T>::TailPush(T e){
if (tail==nullptr){
head = new le(e,nullptr);
tail=head;
}else{
tail->next = new le(e,nullptr);
tail=tail->next;
}
num++;
return;
}

template <typename T>
T* List<T>::Head(){
return &(head->elem);
}
template <typename T>
T* List<T>::Tail(){
return &(tail->elem);
}

template <typename T>
int List<T>::Size(){
return num;
}

template <typename T>
T* List<T>::operator[](int idx){
le *c=head;
if (idx<0||num<=idx) return (T*)NULL;
for (;0<idx;idx--)
c = c->next;
return &(c->elem);
}


#endif

スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

tag : アルゴリズムとデータ構造 c++

コメントの投稿

非公開コメント

プロフィール

舞葉(ぶよう)

Author:舞葉(ぶよう)
github.io
はてなブログ(競プロ)

古い記事のソースコードは色分けしていないので、高機能テキストエディタに貼り付けたほうが見やすいかも。

検索フォーム
このブログについて
自分がつまづいた話題、なんとなく書きたいと思ったこと、ググったけど殆ど資料なかったぞオイ な話等をアップする予定。通りすがりでも、参考になっていただければと。プログラムの例外入力、メモリリークは責任負いません。投稿された記事は修正・削除する場合があります。
カテゴリ
タグ

HSP3アルゴリズムとデータ構造c++RubyJavaUnity画像解析C機械学習C#LinuxcodeIQKinectMinecraftTonyuSystemraspberrypiPythonHTML5音声制御Simulinkruby俺ルール通信制御Javascriptシミュレーション

counter-shinobi
固定記事
最新記事
最新コメント
月別アーカイブ
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
1467位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
265位
アクセスランキングを見る>>