データ構造とアルゴリズムリニアテーブル(シーケンシャルストレージ)

まず、データ構造は、確かにそれはもっと理解する必要がありますが、そのコードのためにそれを達成するために?それは少し難しいかもしれません。

あなたに役立つことを期待して、いくつかの有用な研究ノートを取得するために、今日名誉を確認します。

 

順次格納する(ダイナミックアレイの実装)

アイデア:私たちは映画のチケットを買うために並ぶように行くとリンクリストの最初の順序は、、のように、物理レベルで一緒に一つずつリンクされている、とも論理層なので、このような場合のために、配列は、より良い選択であります動的配列の使用がより良い選択であるように、ストレージを考えるときには、私たちは未来のサイズが格納されるかわからないので、固定された配列のサイズは、プログラムの使用につながる場合に多くの時間は、小さいです。私は個人的には悪くない書かれて、それがこのブログでは、ここで推奨され、動的配列に関するいくつかの情報を学んで見ました。

書式#include <stdio.hに>
する#include <stdlib.h>に含ま
書式#include <string.hの>

//メモリのダイナミックな成長、メモリのデータストレージ戦略があるでしょうか?ヒープの山は
//動的配列
保存することができますどのように多くの要素の私の合計表現するために、このメモリ空間の容量の容量//
配列の現在の要素の大きさの概念レコードの特定の番号を//

//ダイナミックアレイ構造の定義
のtypedef構造体{DYNAMICARRYの
INT * PADDR; //ストア特定のアドレスデータ(動的配列)
のintサイズ、要素の//現在の数が、
容量値int; //コンテナの容量の現在の最大容量
} Dynamic_Array ;

 

//初期化
Dynamic_Array * INIT_ARRAY(){

Dynamic_Array * MyArrayという=(Dynamic_Array *)はmalloc(はsizeof(Dynamic_Array))。
(MyArrayという== NULL)の場合
、戻りNULL;
myArray->サイズ= 0。
myArray->容量= 20。
myArray-> PADDR =(INT *)はmalloc(はsizeof(INT)* myArray->容量)
myarrayのを返します。
}


//插入
無効PushBack_Array(Dynamic_Arrayの*の編曲、int型の値){

(ARR == NULL){IF
リターン;
}
//十分な領域か否かを判断する
IF(arr-> arr-サイズ==>容量){
//大きなメモリ空間を印加する第1のステップは、2つの新しい古い空間であります回
のint * newspace =(int型*)はmalloc(はsizeof(int型)* arr->容量* 2);
//は、第二段階のクチコミ空間にデータをコピーする
のmemcpy(newSpace、arr-> PADDR、 arr->容量*はsizeof( INT))、
メモリ空間を解放する//第三工程
フリー(arr-> PADDR);
//更新容量
arr->容量= arr->容量* 2;
arr-> PADDR Newspace =;
}
//新しいインサート要素
arr-> PADDR [arr->サイズ] =値;
arr->サイズ++。

}
//位置削除
{ボイドRemoveByPos_Array(ARR Dynamic_Array *、int型のPOS)
IF(ARR == NULL){
リターン;
}

if (pos >= arr->size || pos < 0) {
return;
}

//删除某位置的数
for (int i = pos; i < arr->size - 1; i++) {
arr->pAddr[i] = arr->pAddr[i + 1];
}

arr->size--;
}
//根据值第一次出现的删除
void RemoveByValue_Array(Dynamic_Array* arr, int value) {
if (arr == NULL) {
return;
}
int pos = Find_Array(arr, value);
//根据位置删除
RemoveByPos_Array(arr, pos);

}
//查找
int Find_Array(Dynamic_Array* arr, int value) {
if (arr == NULL) {
return -1;
}

int pos = -1;
for (int i = 0; i < arr->size; i++)
if (arr->pAddr[i] == value) {
pos = i+1;
break;
}

return pos;
}
//打印
void Print_Array(Dynamic_Array* arr) {
for (int i = 0; i < arr->size; i++) {
printf("%d ", arr->pAddr[i]);
}
printf("\n");
}
//释放动态数组的内存
void FreeSpace_Array(Dynamic_Array* arr) {
if (arr == NULL) {
return;
}

if (arr->pAddr!= NULL) {
free(arr->pAddr);
}
free(arr);
}
//清空数组
void Clear_Array(Dynamic_Array* arr) {
if (arr == NULL) {
return;
}

arr->size = 0;

}
// 获得动态数组当前的元素个数
int Size_Array(Dynamic_Array* arr) {
if (arr == NULL) {
return -1;
}

return arr->size;
}
//获得动态数组当前的容量
int Capacity_Array(Dynamic_Array* arr) {
if (arr == NULL) {
return -1;
}

 

return arr->capacity;
}
//根据位置获得某个位置元素
int At_Array(Dynamic_Array* arr, int pos) {

return arr->pAddr[pos];
}

 

おすすめ

転載: www.cnblogs.com/Justina/p/11432509.html