注文表は、のコレクションを表し

/ *] [問題の説明
この問題は、主な機能でプログラミング及びテスト各種操作のセットを整数データを格納するために定義され、実装のセットを必要とします。
] [基本要件
操作の次のセットを達成するために:
(1)コレクションに番号を追加; //完了
(2)コレクションから要素を除去すること; //完了
(3)コレクション内の要素かどうかを決定するには; //完了します
実現および動作(4)は、2つのセットは、
、交差演算の(5)は、2つのセットが実装され
、実現の2つのセットの間の差分計算(6)
(7)は、2つのセットが等しいかどうかを判断する。
(8)を設定したか否かを判定するyesの場合、絶対補数の合計が相対補体を見つけ、それ以外の場合、別のセットのサブセットである
(9)に示す出力セットのすべての要素。//完全な
デザインのメニュー、すべての関数を呼び出すと要件を超えるシステムを終了します。
[ヒント]達成は、
順序付きリストまたは順序テーブルのセットで表現することができます。
[テストデータは】
主な機能、表示操作結果に様々な動作を呼び出します。テストデータは、可能な限り様々な動作の結果を反映すべきです。
* /
//ヘッダファイルはライブラリ関数が含まれている
書式#include <stdio.hに>
する#include <malloc.hを>
する#include <stdlib.h>に含ま

//函数状态码定义
の#define TRUE 1つ
の#define FALSE 0
の#define OK 1つ
の#define ERROR 0
の#define不可能-1
の#define OVERFLOW -2

LIST_INIT_SIZE 100の#define
の#define LISTINCREMENT 10は、
構造体の//定義
のtypedef int型ElemType、テーブル内の//要素が整数である
typedefは構造体{
//メモリベースアドレス、INT * ELEM
INT長、テーブル内の要素の数//数
のint LISTSIZE; //テーブル容量サイズ
} SqList; //シーケンステーブル型定義

INT ListInsert_Sq(SqList&L、int型の POS、int型E); // 要素Eの挿入POS
ListDelete_Sq(SqList&L、int型のPOS、INT&E)、INT; //削除要素POS場所、及びEによって戻る
INT ListLocate_Sq(SqList L 、INT E); //要素の折り返し位置E検索
のボイドListPrint_Sq(SqList Lを); //順次線形形式を出力

//初期化と動作の構造の破壊
順序付きシーケンスの空のテーブルとして//初期L INT InitList_Sq(SqList&L)
{
L.elem =(INT )はmalloc(LIST_INIT_SIZEはsizeof(INT));
IF(!L.elem)
終了(オーバフロー);
L.listsize = LIST_INIT_SIZE;
= 0 L.lengthは、
OKを返す;
}
//メイン関数
メインINT(){
SqList L;
INT OPERATIONTYPE; //操作タイプ
(!InitList_Sq(L)はOK =)をIF
{
printf( "InitList_Sq:初期化に失敗!!! \ N-");
戻り-1;
}
(INT I = 1; I <= 10; I ++)用
{
ListInsert_Sq(L、I、I);
}
のprintf( " 一連の操作(シーケンステーブル) \ N- ");
...のprintf(" 1つの増加\ n2の削除は\ \ N- \ n4の出力シーケンステーブルを見つけるN3 ");
のprintf("次のように入力してください:「);
scanf関数( "%のD"、&OPERATIONTYPE);
一方(OPERATIONTYPE!= 0)
{
IF(OPERATIONTYPE == 1)オペレーティング//増加する
{
int型POS、ELEMを;
のprintf( "挿入位置を入力してください");
scanf関数(「% D "&POS);
のprintf("インサート要素を入力してください");
scanfの(" %のD」、&ELEM);
ListInsert_Sq(L、POS、ELEM);
}
そうIF(OPERATIONTYPE == 2)//削除
{
INT POS; INT ELEM;
のprintf( "削除された場所を入力してください");
scanfの( "%のD"、&POS);
ListDelete_Sq(L、POS、ELEM);
のprintfは、( "削除元素であり%D \ n"は、ELEM);
}
。他IF(OPERATIONTYPE == 3)は//位置決め動作検索
{
; INT ELEM
のprintf( "見つけるために要素を入力してください");
scanfの( "%のD"、&ELEM);
INT ListLocate_Sq POS =(L 、要素);
(POS> = POS 1 && <= L.length)IF
{
;のprintf(POS "要素の位置がD%\ N-である")
}

{
のprintf( "そのような表要素\ N-");
}
}
そうでなければ(OPERATIONTYPE == 4)//出力動作もし
{
ListPrint_Sq(L);
}
そうIF(OPERATIONTYPE == 0)
{
戻り0;
}
そうでなければ
{
のprintf( "入力エラーが、\ N-再入力してください");
}
printf( "を入力してください操作:");
scanfの( "%のD"、&OPERATIONTYPE);
}
}
ListInsert_Sq(SqList&L、INT POS、INT E)、INT
{
INT * newbase; //最初のアドレス定義拡張
(POS場合> = POS 1 && <+ = L.length。1)L.lengthの範囲内かどうかについての//のPOS決意
{
IF(L.length> = L.LISTSIZE)//もしL.lengthに達し又は設定値を超えた、容量が必要とされている
{
newbase =(INT *)のrealloc(L.elem、(+ L.listsize LISTINCREMENT)*はsizeof(INT)); //動的に割り当てnewbase宇宙LISTINCREMENTの新しい長
割り当てが失敗した場合(newbase!)//エラーが返された場合
、戻りエラー。
L.elem = newbase; //新しいアロケーション・空間群のアドレス
L.listsize + = LISTINCREMENT; //今、長いスペースこれは、元の空間の長さに加え、新たに割り当てられた領域の長さに等しい
}
int型のP *、Q *;
P =&(L.elem [POS - 1。]); //割り当てアドレス要素POSポインタPの元の位置に
(Q =ため&(L.elem [L.length - 1] ); Q> = P; -q)// アドレス本来最後のデータ位置qにシーケンステーブルを割り当て、そしてデータを順次後方から前方に移動ビット
{
* = Q *(1 + Q);
}
* P = E; E //データ位置posに
++ L.length、テーブルの長さを増加させるため//
OKを返す;
}
そう
リターンOVERFLOW。
}
INT ListDelete_Sq(L&SqList、POSのINT、INT&E)
{
IF(POS> = POS 1 && <= L.length)// POSシーケンステーブルの長さかどうかを決定する
{
INT * Q、
E = L.elem [POS - 1]; // E最初の割り当て、すなわちその削除の数返す
ため(Q =&(L.elem [ POS - 1]); Q <=&(L.elem [L.length - 1]); ++ Q)// 位置pos後順次フォワード要素移動
{
* = Q *(Q + 1);
}
。L.length L.lengthを= - 1; //保存長さL
}
そう
リターンOVERFLOW;
}
int型ListLocate_Sq(SqList L、E INT )
{
int型A = -1; //与えられた初期値に、最初のいくつかのデータは、割り当てので、-1、-1とすることができないかどうかを見つけるために
I <= L.;(INT I = 0長さ-1; I ++)//ループを見つけるために
、{
IF([I] == L.elem E)
{
A = I;
BREAK;
}
}
IF(A> = 0 && A <L.length = -1)
を返します+ 1; //値が要件を満たすためにした場合、戻り
それ以外の
戻りERROR;満たされない場合、//、エラーが返されます。
}
ボイドListPrint_Sq(SqList L)
{
ため(INT I = 0; I <= L.length - 2; I ++)
{
のprintf( "%Dを"、[I] L.elem);
}
のprintf( "%のD"、 L.elem [L.length -1])。

}

公開された11元の記事 ウォンの賞賛0 ビュー172

おすすめ

転載: blog.csdn.net/yucan1234/article/details/93757014