PUSHとPOP(Stack)
Top -> プログラミング -> アルゴリズム(Algorithm by the C language) -> PUSHとPOP(Stack)
1.PUSH、POPとは

別名「Stack(スタック)」とも呼ばれ「FILO(First In Last Out)」方法を用いるデータ構造です。

FILOとは、最初に入れたデータが一番最後に取り出せる事を意味します。簡単に言うと バケツに上から重ねていくように物を入れ、取り出すときは1番上から取り出します。 実際には、リスト構造を用いることにより簡単に実現できます。

2.PUSHの実装

PUSHを実装するには、リスト構造の先頭へデータを追加する事で可能となります。

/* * リストの先頭にNodeを追加 */ void HeadInsert(LIST **Head, LIST *Node) { /* データを追加 */ Node->next = *Head; *Head = Node; }
3.POPの実装

POPを実装するには、リスト構造の先頭データを取得し削除する事で可能となります。

/* * POPの一部抜粋 */ w=1; /* 先頭を指定 */ p=GetNode(&head, w); if(p!=(LIST *)NULL){ printf("POPしました %2d >> %d\n", w, p->data); DeleteNode(&head, w); }else{ printf("POPするデータはありません"); } /* * リスト内のNodeを削除 */ void DeleteNode(LIST **Head, int Position) { LIST *p, *Node; Position--; /* 削除位置の一つ前にする */ if(*Head != (LIST *)NULL){ /* LISTが存在しないなら終了 */ if(Position==0){ /* 削除位置が先頭なら解放 */ p=*Head; *Head = p->next; NodeFree(p); /* 削除位置がList内なら */ }else if(GetNodeTotal(Head)>Position && Position>0){ p=GetNode(Head, Position); /* 削除位置のNodeを取得 */ Node = p->next; /* Nodeを解放する */ p->next = Node->next; NodeFree(Node); } } } /* * Nodeのデータを取得 */ LIST *GetNode(LIST **Head, int n) { int j=1; LIST *p; /* NULLが出るか、n番目のノードを取得するまでループ */ for(p=*Head; p!=(LIST *)NULL; p=p->next){ if(j==n)break; j++; } return p; }
サンプル

以下のリンクからサンプルを閲覧又はダウンロードできます。
このサンプルはSHIFT-JISで書かれております。

閲覧またはダウンロード
戻る
カウンター