//ライブラリ関数の参照
#include <stdio.h>
#include <stdlib.h>
//シンボリック定数の定義
#define MAXSIZE 100 //推定シーケンステーブル容量
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//データ型の名前変更と定義
typedef int Status;
typedef int ElemType;
typedef struct{ ElemType *elem; int length; }SqList;
//カスタム関数の宣言
Status InitList(SqList &L);
Status ListInsert(SqList &L,int i ,ElemType e);
Status ListDelete(SqList &L,int i);
Status GetElem(SqList L, int i, ElemType &e);
//メイン関数
int main(int argc, char *argv[]) { SqList L; int choice,z = 1; int i; ElemType e; if(!InitList( L )) { exit(0); } //出力メニュー while(z) { printf("-------線形テーブル データ格納構造---\n"); printf("|\t\t1.挿入\t\t|\n"); printf("|\t\t2.Delete\t\t|\n"); printf("|\t\t3.Find\t\t|\n"); printf("|\t\t0.Exit \t\t|\n"); printf("選択したいプログラムを入力してください\n"); scanf("%d",&choice); switch(choice){ case 1://insert //for既に知っている L (既知), i, e printf("挿入位置を入力してください: "); scanf("%d",&i);
printf("挿入要素を入力してください:");
scanf("%d",&e);
//
if(OK == ListInsert(L , i , e))
{ printf("挿入に成功しました!\n\n" ); } else { printf("挿入に失敗しました!\n\n"); } break; case 2://Delete printf("削除したい場所を入力してください\n"); scanf("%d",&i ) ; if(OK == ListDelete(L,i)) { printf("正常に削除されました\n\n"); } else { printf("削除に失敗しました\n\n"); }
break;
case 3://search
printf("検索したい要素の通し番号を入力してください\n");
scanf("%d",&i);
//call
if(OK == GetElem(L , i , e))
{ printf("探している要素は次のとおりです: \n"); } else { printf("入力したシリアル番号が間違っています\n"); } break;
case 0:z = 0;
printf("次回もよろしくお願いします!");
break;
default:printf("入力エラー!\n");
}
}
return 0;
}
//——————Custom function (「データ構造」より)
//Initialization
Status InitList(SqList &L){ //空のシーケンス テーブルを作成します
L.elem = new ElemType[MAXSIZE]; //シーケンス テーブルにスペースを割り当てます
if(!L.elem) exit (OVERFLOW); //ストレージ割り当て失敗
L.length = 0; //空のテーブルの長さは 0
return OK;
}
//挿入アルゴリズムの
ステータス ListInsert(SqList &L,int i ,ElemType e){ int j;
if(i<1 || i>L.length+1) return ERROR; //i の値が正しくない
if(L.length==MAXSIZE) return ERROR; //現在のストレージ スペースがいっぱいです
for(j=L.length -1;j >= i-1;j--) L.elem[j+1]=L.elem[j]; //位置を挿入し、後続の要素を後方に移動
L.elem[i-1]=e ; //新しい要素 e を i 番目の位置に入れる
L.length ++; //テーブルの長さを 1 増やす
return OK;
}
//削除アルゴリズム
Status ListDelete(SqList &L,int i)
{ int j; if( (i <1)||(i>L.length)) return ERROR; //i の値は (j=i ; j<=L.length-1 ; j++) L.elem[j-1]= に対して 無効ですL.elem[j];//削除された要素の次の要素を前に移動 --L.length; //テーブルの長さを 1 減らす
OK を返します。
}
//
ステータスを返します GetElem ( SqList L , int i , ElemType &e ) { if ( i < 1 || i > L .length ) return ERROR ; e = L.elements[i-1]; OK を返します。} }