データ構造 - 順次テーブルの挿入、削除、および検索アルゴリズム

//ライブラリ関数の参照
#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 を返します。} }




おすすめ

転載: blog.csdn.net/m0_61105833/article/details/120816589