プロジェクト構造:
main.cppに:
書式#include <iostreamの> 書式#include <stdio.hに> する#include <stdlib.h>に含ま の#include " function_for_SqList.h " 使用して 名前空間はstd; INT メイン() { SqList L。 本BOOK1 = { // 创建两本书 " 001 " 、 " book_one " 、 23.6 }。 本BOOK2 = { " 002 " 、 " book_two " 、 34。 int型は initResult = 0 ; int型 InsertResult = 0 ; // ブックス挿入結果の値が返され initResult = InitList(L); //をリニアテーブルを作成 のprintf(" :D%\ N-添加する前に本の数"、GETLENGTH(L)) ; // 現在の数の書籍を取得 // 最初の本追加 InsertResult ListInsert_Sq =(L、1 、BOOK1)を、 IF(InsertResult == 1 ){ のprintf(" 最初の本に挿入が完了し、場合リニアテーブル書籍数であった:%D \ N- "GETLENGTH(L)); } 他{ のprintf("書籍が失敗挿入\ N- " ); } InsertResult = ListInsert_Sq(L、2 、ブック2); IF(InsertResult == 1 ){ のprintf(" 第二ブックに挿入され、次いで書籍の数は、リニアテーブルは、完了する:%D \ n "GETLENGTH(L)); } 他{ printf関数は、(" 書籍\ nの挿入に失敗した" ); } ため(INT J = 0 ; J <L.length; J ++ ){ のprintf(" %のSを\ n " 、 L.elem [J] .NO); } 戻り0 ; }
function_for_SqList.h:
// 関数結果のステータスコード の#define TRUE 1つ の#define FALSE 0 の#define OK 1つ の#define 0 ERROR の#define -1不可能// "不可" の#define OVERFLOW -2 // "オーバーフロー、範囲外の拡張" // の定義一定 の#define MAXSIZE 100 // リニア最大長テーブル のtypedef 構造体{ CHAR [NO 20である ]; // 要素ISBN番号 チャー名[ 50 ]; // 要素名 フロート価格; //書籍(要素)価格 ;}予約 のtypedef 構造体{ 予約 ; * ELEM // メモリベースアドレス INTの長さ; // テーブル内の要素の線形の現在の数 } SqList; // 順次記憶構造型リニアテーブルはSqListある のtypedef int型のステータス; // ステータスは、結果ステータスコードの関数であるタイプの関数である 予約elemTypeのtypedef; // 方法 // 線形初期化リストL(基準パラメータ) ステータスInitList(SqList&L); //は空のシーケンステーブルを構築します / / 破壊リニアフォームLの ボイド DestroyList(SqList&L); // クリア線形リストLの ボイド ClearList(SqList&L)。 // リニアテーブルの長さL見つける INT GETLENGTH(SqList Lを); // 決定リストがリニア空であるか否かを INT のisEmpty(SqListのL); // コンテンツの線形テーブル得る:i番目の要素取ら INT getElem(SqList Lを、int型 iは、elemType&E); // 検索:(順次検索を)、それはかどうかが決定される見つけるために、ISBNによって与えられた値(で見つけるために、この本の存在) / * 存在する場合、いくつかの要素があり、出力 が存在しない場合は、出力0 * / int型LocateElem(SqListのL、elemType電子); // 挿入:上のi番目の位置に挿入された要素e ステータスListInsert_Sq(SqList L&は、int型I、elemType電子); //は削除:i番目の要素を削除する ステータスListDelete_Sqを(SqList L&、int型の I)。
function_for_SqList.cpp:
する#include <stdio.hに> する#include <STDLIB.H> の#include 「function_for_SqList.hは」//ファイルには、ヘッダに追加する必要があり、またはキーワードランタイムを識別できない // 方法 // 線形フォームLを初期化する(参照パラメータ) ステータスInitList(SqList&L){ // 空のシーケンステーブル構築 L.elem = 新しい新しい elemType [MAXSIZEを]; // シーケンシャル空間アロケーションテーブル IF(!L.elem){ 終了(オーバフロー); // ストレージ割り当て失敗 } L.length = 0 ; // 長さ0の空リスト 戻りOK; } // 破壊線形フォームLの ボイドDestroyList(SqList&L){ IF (L.elem){ 削除 L.elemを; // 空き容量(アレイを削除) } } // クリアリニア形Lの 空隙 ClearList(SqList&L){ L.length = 0 ; } // Lは線形テーブルの長さである INT GETLENGTH(SqListのL){ リターン;(L.length) } // 線形テーブルを分析して空である INT (SqListのL){のisEmpty のiF(L.lengthの== 0 ){ リターン 1。; } 他{ リターン 0 ; } } // コンテンツの線形テーブル取得:取らi番目の要素 のint getElem(SqList Lを、int型 I、elemType&{E)を IF(iは< 1。 L.length || I>){ // iの値か否かを判断します合理的かつ不当なリターンエラーなら 戻りERROR; } E = L.elem [I- 1 ]; // 格納されたi番目のデータの(I-1)単位は、 戻りOKを; } // 順次検索を探す:( )(ISBNが与えられ、それは)本の存在かどうかが決定される見つけるために行われたことにより、値を見つけるために / * 存在する場合、いくつかの要素が出力される 存在でない場合、出力0 * / INT {LocateElem(SqList L、elemType E)の ための(INT I =0 ; I L.lengthを<; Iは++ ){ IF(L.elem [I] == .NO e.no){ リターン(I + 1); // 検索が成功し、リターン番号 } } 戻り 0 ; // ルックアップが失敗しました0戻る } // 上のi番目の位置に挿入された要素E:インサート ステータスListInsert_Sq(SqList L&が、int型elemType電子、i)を{ IF(<iは1 || I>(+ L.length 。1))戻り ERRORを; // I無効な値 IF(== MAXSIZE L.length)戻り ERROR; // このストレージがいっぱいです 用(INT J = L.length- 1。 ; J> =(I- 1。); J、){ L.elem [J + 1 ;] = L.elem [J] // 以降要素の挿入位置シフト } L.elem [I - 1。 ] = E; // i番目の位置Eに新しい要素 L.length ++; // 長いテーブルプラス1。 戻るOKを; } // 削除:i番目要素の削除に ステータスをListDelete_Sq(SqList L&、int型I)を{ IF(私は< 1。 L.length || I>)戻り ERROR; // Iの値が有効でない ために(int型I = J; J <=(L.length- 1。); J ++ ){ L.elem [J - 1 ] = L.elem [J]; // 削除された要素の後に前方素子 } L.length - ; // 。長いテーブルの保存1つの リターンOK; }
次に、動作結果:( 2つの要素を挿入する試み、順次各要素のISBN番号を出力)