
3.4 線形リスト |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 番号 | 以下をクリックすると,該当箇所にジャンプします |
| (1) | 線形リストとは |
| (2) | 基本的な操作 |
| (3) | 応用的な操作 |
| (4) | 例題 |

| 番号 | 以下をクリックすると,該当箇所にジャンプします |
| (1) | 線形リストとは |
| (2) | 基本的な操作 |
| (3) | 応用的な操作 |
| (4) | 例題 |






| 番号 | 以下をクリックすると,該当箇所にジャンプします |
| (1) | 線形リストとは |
| (2) | 基本的な操作 |
| (3) | 応用的な操作 |
| (4) | 例題 |
| 番号 | 以下をクリックすると,該当箇所にジャンプします |
| (1) | 線形リストとは |
| (2) | 基本的な操作 |
| (3) | 応用的な操作 |
| (4) | 例題 |
[Program 3−4]

| public struct ElementData { public long 番号; public string 氏名; public int 点数; } public struct ElementSet { public ElementData Element; public long Next; } public ElementSet[ ] DataArea = new ElementSet[500]; public ElementData Element = new ElementData(); public long ErasedP; public long DataP; private void Form1_Load(object sender, System.EventArgs e) { 初期化(); DataP=-1; データ登録(1,"福 田 武 夫",40); データ登録(2,"佐 藤 栄 二",20); データ登録(3,"中曽根 幹 雄",60); データ登録(4,"山 崎 恵 子",50); データ登録(5,"相 馬 剛 司",90); データ登録(6,"金 子 祐次郎",40); データ登録(7,"幸 田 美 咲",70); データ登録(8,"澤 田 幸 一",30); 表示(); } private void 登録(ElementData Element) { long PB=-1; long P=DataP; ElementData tempElement; tempElement.番号=-1; while(P>=0) { tempElement=getElement(P); if(tempElement.番号>=Element.番号) break; PB=P; P=next(P); } if(tempElement.番号==Element.番号) replaceElement(P,Element); else { long P2=cons(Element,P); if(P2>=0) { if(PB<0) DataP=P2; else replaceNext(PB,P2); } } } private void 表示() { long P=DataP; ElementData Element; listBox1.Items.Clear(); while(P>=0) { Element = getElement(P); listBox1.Items.Add(Element.番号.ToString("000000")+"\t"+ Element.氏名+"\t"+Element.点数.ToString()); P = next(P); } } private void データ登録(long 番号, string 氏名, int 点数) { ElementData Element; Element.番号=番号; Element.氏名=氏名; Element.点数=点数; 登録(Element); } private void button1_Click(object sender, System.EventArgs e) { データ登録(long.Parse(textBox1.Text), textBox2.Text, int.Parse(textBox3.Text)); 表示(); } private void 先頭に追加(ElementData Element) { long P2=cons(Element,DataP); if(P2>=0) DataP=P2; } private void button2_Click(object sender, System.EventArgs e) { ElementData Element; Element.番号=long.Parse(textBox1.Text); Element.氏名=textBox2.Text; Element.点数=int.Parse(textBox3.Text); 先頭に追加(Element); 表示(); } private void 最後に追加(ElementData Element) { long P2=cons(Element,-1); if(P2>=0) { PB=last(DataP); if(PB<0) DataP = P2; else replaceNext(PB,P2); } } private void button3_Click(object sender, System.EventArgs e) { ElementData Element; Element.番号=long.Parse(textBox1.Text); Element.氏名=textBox2.Text; Element.点数=int.Parse(textBox3.Text); 最後に追加(Element); 表示(); } private long 氏名検索(string 氏名) { long P=DataP; while(P>=0) { if(string.Compare(getElement(P).氏名,氏名)==0) break; P=next(P); } return P; } private void button4_Click(object sender, System.EventArgs e) { ElementData E; string S; long P=氏名検索(textBox2.Text); if(P<0) S="見つかりませんでした" else { E=getElement(P); S="Pointer = " + P.ToString() + " 番号 = " + E.番号.ToString() + " 点数 = " + E.点数.ToString(); } MessageBox.Show(S); } private void 氏名検索後削除(string 氏名) { long PB=-1; long P=DataP; while(P>=0) { if(string.Compare(getElement(P).氏名,氏名)==0) break; PB = P; P = next(P); } if(P<0) return; if(PB<0) DataP=next(P); else replaceNext(PB,next(P)); FreeArea(P); } private void button5_Click(object sender, System.EventArgs e) { 氏名検索後削除(textBox2.Text); 表示(); } private void 線形リストによる単純挿入ソート() { long P1=DataP; long NP1; if(P1<0) return; long PB1=P1; P1=next(P1); while(P1>=0) { ElementData E1=getElement(P1); long P2=DataP; long PB2=-1; bool flag=false; while(P1 != P2) { ElementData E2=getElement(P2); if(E1.点数<E2.点数){flag=true; break;} PB2=P2; P2=next(P2); } if(flag) { NP1=next(P1); replaceNext(PB1,NP1); replaceNext(P1,P2); if( PB2<0) DataP=P1; else replaceNext(PB2,P1); P1=NP1; } else {PB1=P1;P1=next(P1); } } } private void button6_Click(object sender, System.EventArgs e) { 線形リストによる単純挿入ソート(); 表示(); } |
| 番号 | 以下をクリックすると,該当箇所にジャンプします |
| (1) | 線形リストとは |
| (2) | 基本的な操作 |
| (3) | 応用的な操作 |
| (4) | 例題 |