/*------------------------------------------------
連結リストの実装例(リストヘッドによる方法)
------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
//DATA型を定義(正体は int 型)
typedef int DATA;
//NODE型の構造体定義
typedef struct node {
struct node *next; // 次のノードへのポインタ
DATA data; // データ部
} NODE;
//リストの先頭ポインタを保持する変数の宣言
NODE list_head;
//関数のプロトタイプ宣言
void addNewNodeToHead( DATA* ); // 先頭ノードを追加
void deleteFirstNode(); // 先頭ノードを削除
void showList(); //リストの表示
/*---------------------------------------
メイン関数
---------------------------------------*/
int main()
{
int key;
DATA value = 1; //格納する値を生成するための変数
// リストヘッドの初期化
list_head.next = NULL;
//終了の 9 が入力されるまで繰り返す
while( key != 9 ) {
//リストの表示
showList();
//メニューを表示
printf("1.先頭に追加,2.先頭を削除,9.終了:");
//メニュー番号の入力と分岐
switch( key ) {
case 1: //リストの先頭にデータを追加
//追加するDATA(いまは整数値)を引数に追加関数をよぶ
addNewNodeToHead( &value ); //注意:ノードを追加後,ついでに value をインクリメントしている
break;
case 2: //先頭のデータを削除
//先頭の要素を削除する関数をよぶ
deleteFirstNode();
break;
}
}
return 0;
}
//リストの先頭にノードを追加する
void addNewNodeToHead( DATA *d )
{
int i,key;
NODE *newNode, *pos;
if(key == 0)
{
return ;
}
pos = &list_head;
for(i = 0; i < key-1; i++)
{
if(pos->next == NULL)
break;
pos = pos->next;
}
if(i != key - 1)
{
printf("%d番目には追加できません。\n",key
); return ;
}
newNode
= (NODE
*)malloc(sizeof(NODE
));
if(newNode == NULL)
newNode->next = pos->next;
newNode->data = (*d)++;
pos->next = newNode;
}
// リストの先頭ノードを削除する
void deleteFirstNode()
{
int i,key;
NODE *pos, *prevNode;
if(key == 0)
return ;
pos = &list_head;
for(i = 0; i < key-1; i++)
{
if(pos->next == NULL)
break;
pos = pos->next;
}
if(i != key - 1)
{
printf("%d:番目の要素はありません。\n",key
); return ;
}
if(pos->next == NULL)
{
printf("%d:番目の要素はありません。\n",key
); return ;
}
prevNode = pos->next;
pos->next = prevNode->next;
}
//連結リストの状態を表示する
void showList()
{
int cnt = 0;
NODE *pos; //読み出し位置にあるノードへのポインタ変数
//最初のノードのアドレスを取得(注意: リストが空の場合は NULL が入っている)
pos = list_head.next;
while(pos != NULL)
{
pos = pos->next;
cnt++;
}
if(cnt != 0)
//最初のノードのアドレスを取得(注意: リストが空の場合は NULL が入っている)
pos = list_head.next;
//末尾のノードまで繰り返す
while ( pos != NULL ) {
printf("%d ", pos
->data
); //データ参照して表示 pos = pos->next; //次のノードに進む
}
}
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCemAo+e1kOODquOCueODiOOBruWun+ijheS+i++8iOODquOCueODiOODmOODg+ODieOBq+OCiOOCi+aWueazle+8iQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8vREFUQeWei+OCkuWumue+qe+8iOato+S9k+OBryBpbnQg5Z6L77yJCnR5cGVkZWYgaW50IERBVEE7CgovL05PREXlnovjga7mp4vpgKDkvZPlrprnvqkKdHlwZWRlZiBzdHJ1Y3Qgbm9kZSB7CglzdHJ1Y3Qgbm9kZQkqbmV4dDsJLy8g5qyh44Gu44OO44O844OJ44G444Gu44Od44Kk44Oz44K/CglEQVRBCQlkYXRhOwkvLyDjg4fjg7zjgr/pg6gKfSBOT0RFOwoKLy/jg6rjgrnjg4jjga7lhYjpoK3jg53jgqTjg7Pjgr/jgpLkv53mjIHjgZnjgovlpInmlbDjga7lrqPoqIAKTk9ERQlsaXN0X2hlYWQ7CgovL+mWouaVsOOBruODl+ODreODiOOCv+OCpOODl+Wuo+iogAp2b2lkIGFkZE5ld05vZGVUb0hlYWQoIERBVEEqICk7CS8vIOWFiOmgreODjuODvOODieOCkui/veWKoAp2b2lkIGRlbGV0ZUZpcnN0Tm9kZSgpOwkJCS8vIOWFiOmgreODjuODvOODieOCkuWJiumZpAp2b2lkIHNob3dMaXN0KCk7CQkJCS8v44Oq44K544OI44Gu6KGo56S6CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJ44Oh44Kk44Oz6Zai5pWwCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmludCBtYWluKCkKewoJaW50CQlrZXk7IAoJREFUQQl2YWx1ZSA9IDE7CS8v5qC857SN44GZ44KL5YCk44KS55Sf5oiQ44GZ44KL44Gf44KB44Gu5aSJ5pWwCgkKCS8vIOODquOCueODiOODmOODg+ODieOBruWIneacn+WMlgoJbGlzdF9oZWFkLm5leHQgPSBOVUxMOwoJCgkvL+e1guS6huOBriA5IOOBjOWFpeWKm+OBleOCjOOCi+OBvuOBp+e5sOOCiui/lOOBmQoJd2hpbGUoIGtleSAhPSA5ICkgewoJCQoJCS8v44Oq44K544OI44Gu6KGo56S6CgkJc2hvd0xpc3QoKTsKCQkKCQkvL+ODoeODi+ODpeODvOOCkuihqOekugoJCXByaW50ZigiMS7lhYjpoK3jgavov73liqDvvIwyLuWFiOmgreOCkuWJiumZpO+8jDku57WC5LqG77yaIik7CgkJCgkJLy/jg6Hjg4vjg6Xjg7znlarlj7fjga7lhaXlipvjgajliIblspAKCQlzY2FuZigiJWQiLCZrZXkpOwkJCgkJc3dpdGNoKCBrZXkgKSB7CgkJCQoJCQljYXNlIDE6IC8v44Oq44K544OI44Gu5YWI6aCt44Gr44OH44O844K/44KS6L+95YqgCgoJCQkJLy/ov73liqDjgZnjgotEQVRB77yI44GE44G+44Gv5pW05pWw5YCk77yJ44KS5byV5pWw44Gr6L+95Yqg6Zai5pWw44KS44KI44G2CgkJCQlhZGROZXdOb2RlVG9IZWFkKCAmdmFsdWUgKTsJLy/ms6jmhI/vvJrjg47jg7zjg4njgpLov73liqDlvozvvIzjgaTjgYTjgafjgasgdmFsdWUg44KS44Kk44Oz44Kv44Oq44Oh44Oz44OI44GX44Gm44GE44KLCgkJCQlicmVhazsKCQkJCQoJCQljYXNlIDI6IC8v5YWI6aCt44Gu44OH44O844K/44KS5YmK6ZmkCgoJCQkJLy/lhYjpoK3jga7opoHntKDjgpLliYrpmaTjgZnjgovplqLmlbDjgpLjgojjgbYKCQkJCWRlbGV0ZUZpcnN0Tm9kZSgpOwoJCQkJYnJlYWs7CgkJfQkJCgl9CgkKCXJldHVybiAwOwp9CgovL+ODquOCueODiOOBruWFiOmgreOBq+ODjuODvOODieOCkui/veWKoOOBmeOCiwp2b2lkIGFkZE5ld05vZGVUb0hlYWQoIERBVEEgKmQgKQp7CglpbnQgaSxrZXk7CglOT0RFICpuZXdOb2RlLCAqcG9zOwoJCglwcmludGYoIuS9leeVquebruOCkui/veWKoOOBl+OBvuOBmeOBizoiKTsKCXNjYW5mKCIlZCIsJmtleSk7CgkKCWlmKGtleSA9PSAwKQoJewoJICAgIHByaW50ZigiMOeVquebruOBq+OBr+i/veWKoOOBp+OBjeOBvuOBm+OCk+OAglxuIik7CgkgICAgcmV0dXJuIDsKCX0KCXBvcyA9ICZsaXN0X2hlYWQ7CgkKCWZvcihpID0gMDsgaSA8IGtleS0xOyBpKyspCgl7CgkgICAgaWYocG9zLT5uZXh0ID09IE5VTEwpCgkgICAgICAgIGJyZWFrOwoJICAgIHBvcyA9IHBvcy0+bmV4dDsKCX0KCQoJaWYoaSAhPSBrZXkgLSAxKQoJewoJICAgIHByaW50ZigiJWTnlarnm67jgavjga/ov73liqDjgafjgY3jgb7jgZvjgpPjgIJcbiIsa2V5KTsKCSAgICByZXR1cm4gOwoJfQoJbmV3Tm9kZSA9IChOT0RFICopbWFsbG9jKHNpemVvZihOT0RFKSk7CgkKCWlmKG5ld05vZGUgPT0gTlVMTCkKCSAgICBleGl0KDEpOwoJCgluZXdOb2RlLT5uZXh0ID0gcG9zLT5uZXh0OwoJbmV3Tm9kZS0+ZGF0YSA9ICgqZCkrKzsKCXBvcy0+bmV4dCA9IG5ld05vZGU7Cn0KCi8vIOODquOCueODiOOBruWFiOmgreODjuODvOODieOCkuWJiumZpOOBmeOCiwp2b2lkIGRlbGV0ZUZpcnN0Tm9kZSgpCnsKICAgIGludCBpLGtleTsKCU5PREUgKnBvcywgKnByZXZOb2RlOwoJCglwcmludGYoIuS9leeVquebruOCkuWJiumZpOOBl+OBvuOBmeOBizoiKTsKCXNjYW5mKCIlZCIsJmtleSk7CgkKCWlmKGtleSA9PSAwKQoJICAgIHJldHVybiA7CgkKCXBvcyA9ICZsaXN0X2hlYWQ7CgkKCWZvcihpID0gMDsgaSA8IGtleS0xOyBpKyspCgl7CgkgICAgaWYocG9zLT5uZXh0ID09IE5VTEwpCgkgICAgICAgIGJyZWFrOwoJICAgIHBvcyA9IHBvcy0+bmV4dDsKCX0KCQoJaWYoaSAhPSBrZXkgLSAxKQoJewoJICAgIHByaW50ZigiJWQ655Wq55uu44Gu6KaB57Sg44Gv44GC44KK44G+44Gb44KT44CCXG4iLGtleSk7CgkgICAgcmV0dXJuIDsKCX0KCWlmKHBvcy0+bmV4dCA9PSBOVUxMKQoJewoJICAgIHByaW50ZigiJWQ655Wq55uu44Gu6KaB57Sg44Gv44GC44KK44G+44Gb44KT44CCXG4iLGtleSk7CgkgICAgcmV0dXJuIDsKCX0KCQoJcHJldk5vZGUgPSBwb3MtPm5leHQ7Cglwb3MtPm5leHQgPSBwcmV2Tm9kZS0+bmV4dDsKCQp9CgovL+mAo+e1kOODquOCueODiOOBrueKtuaFi+OCkuihqOekuuOBmeOCiwp2b2lkIHNob3dMaXN0KCkKewogICAgaW50IGNudCA9IDA7CglOT0RFICpwb3M7CS8v6Kqt44G/5Ye644GX5L2N572u44Gr44GC44KL44OO44O844OJ44G444Gu44Od44Kk44Oz44K/5aSJ5pWwCgkKCS8v5pyA5Yid44Gu44OO44O844OJ44Gu44Ki44OJ44Os44K544KS5Y+W5b6X77yI5rOo5oSPOiDjg6rjgrnjg4jjgYznqbrjga7loLTlkIjjga8gTlVMTCDjgYzlhaXjgaPjgabjgYTjgovvvIkKCXBvcyA9IGxpc3RfaGVhZC5uZXh0OwogICAgCiAgICB3aGlsZShwb3MgIT0gTlVMTCkKICAgIHsKICAgICAgICBwb3MgPSBwb3MtPm5leHQ7CiAgICAgICAgY250Kys7CiAgICB9CiAgICBpZihjbnQgIT0gMCkKICAgICAgICBwcmludGYoIiVkOiAiLCBjbnQpOwogICAgCiAgICAvL+acgOWIneOBruODjuODvOODieOBruOCouODieODrOOCueOCkuWPluW+l++8iOazqOaEjzog44Oq44K544OI44GM56m644Gu5aC05ZCI44GvIE5VTEwg44GM5YWl44Gj44Gm44GE44KL77yJCglwb3MgPSBsaXN0X2hlYWQubmV4dDsKICAgIAoJLy/mnKvlsL7jga7jg47jg7zjg4njgb7jgafnubDjgorov5TjgZkKCXdoaWxlICggcG9zICE9IE5VTEwgKSB7CgkJcHJpbnRmKCIlZCAiLCBwb3MtPmRhdGEpOwkvL+ODh+ODvOOCv+WPgueFp+OBl+OBpuihqOekugoJCXBvcyA9IHBvcy0+bmV4dDsJCQkvL+asoeOBruODjuODvOODieOBq+mAsuOCgAoJfQoJCglwcmludGYoIlxuIik7Cn0=