練習問題1.9順序配列の挿入(20分)

6008 ワード

練習問題1.9順序配列の挿入(20分)本題は、任意の所与の要素を大から小までの配列の中の適切な位置に挿入し、結果が依然として秩序化されていることを維持することを要求する.
関数インターフェース定義:book Insert(List L,ElemenntType X);List構造の定義は以下の通りである.
typedef int Position;typedef struct LNode List;struct LNode{ElementType Data[MAXSIZE];Position Last;/線形表の最後の要素の位置*/}を保存する.Lは、ElementType要素が、==、
アンパイアテスト手順例:〹include
萼define MAXSIZE 10 typedef enum{false、true}book;typedef int ElementType;
typedef int Position;typedef struct LNode List;struct LNode{ElementType Data[MAXSIZE];Position Last;/線形表の最後の要素の位置*/}を保存する.
List ReadInput()/*審判が実現しました.詳細は表にしません.要素は、下付き0から格納/void PrintList(List L)を開始する;審判が実現しました.詳細は*/book Insert(List L、ElemenntType X)ではありません.
int main(){List L;ElemenntType X;
L = ReadInput();
scanf("%d", &X);
if ( Insert( L, X ) == false )
    printf("Insertion failed.
"); PrintList( L ); return 0;
)
//*あなたのコードはここに埋め込まれます.
    1:
5
35 12 8 7 3
10
    1:
35 12 10 8 7 3
Last = 5
    2:
6
35 12 10 8 7 3
8
    2:
Insertion failed.
35 12 10 8 7 3
Last = 5
bool Insert( List L, ElementType X ){
    if(L->Last+1==MAXSIZE)
        return false;
    for (int i=0; i<=L->Last; i++) {
        if(L->Data[i]==X)
            return false;
        else if (L->Data[i]<X) {
            for (int j=L->Last; j>=i; j--) {
                L->Data[j+1]=L->Data[j];
            }
            L->Data[i]=X;
            L->Last=L->Last+1;//        
            break;
        }
        else if(i==L->Last&&L->Data[i]>X){
            L->Data[L->Last+1]=X;
            L->Last=L->Last+1;//        
            break;
        }
    }
    return true;
}