【C言語】シーケンス表、配列


順序表の構築は、自身の構造であり、利用は配列であり、開発されたメモリ空間の大きさは固定されている.チェーン構造のような開発空間の制御性はない.最も基本的なデータ構造認識.
    次に、データ構造における基本的な実現と思想を見てみよう.
    
#include "seqList.h"
#include <stdio.h>
#include <assert.h>
//       
void InitSeqList(SeqList* seq)
{
	int _index = 0;
	assert(seq);
	for(;_index < MAX_SIZE;++_index)
	{
		seq->_array[_index] = 0;
	}
	seq->_size = 0;
}

//     
void PrintSeqList(SeqList* seq)
{
	int _index = 0;
	assert(seq);
	if(0 == seq->_size)
	{
		printf("       
"); return; } for(;_index<seq->_size;++_index) { printf("%d ",seq->_array[_index]); } printf("
"); } // void PushBack(SeqList* seq, DataType x) { int _CheckSeq; assert(seq); if(1 == (_CheckSeq = CheckSeqList(seq))) { printf(" "); return; } seq->_array[seq->_size++] = x; } // void PopBack(SeqList* seq) { int _CheckSeq; assert(seq); if(0 == (_CheckSeq = CheckSeqList(seq))) { printf("
"); return; } seq->_array[--seq->_size] = 0; } // void PushFront(SeqList* seq, DataType x) { int _index = 0; int _CheckSeq; assert(seq); if(1 == (_CheckSeq = CheckSeqList(seq))) { printf(" "); return; } for(;_index < seq->_size;++_index) { seq->_array[seq->_size-_index] = seq->_array[seq->_size - _index - 1]; } seq->_array[0] = x; seq->_size++; } // void PopFront(SeqList* seq) { int _index = 0; int _CheckSeq; assert(seq); if(0 == (_CheckSeq = CheckSeqList(seq))) { printf("
"); return; } for(;_index<seq->_size-1;++_index) { seq->_array[_index] = seq->_array[_index+1]; } seq->_size--; } // void Insert(SeqList* seq, size_t pos, DataType x) { int _index = seq->_size; int _CheckSeq; assert(seq); if(1 == (_CheckSeq = CheckSeqList(seq))) { printf(" "); return; } if(pos < 0 || pos > seq->_size) { printf(" "); return; } for(;_index > pos;--_index) { seq->_array[_index] = seq->_array[_index - 1]; } seq->_array[pos] = x; seq->_size++; } // 。 //  -1 int Find(SeqList* seq, DataType x) { int _endIndex = 0; assert(seq); for(; _endIndex < seq->_size;++ _endIndex) { if(x == seq->_array[_endIndex]) { return _endIndex; } } return -1; } // void Erase(SeqList* seq, size_t pos) { int _index = pos; assert(seq); if(pos < 0 || pos > seq->_size) { printf(" "); return; } for(;_index < seq->_size-1;++_index) { seq->_array[_index] = seq->_array[_index+1]; } } // void Remove(SeqList* seq, DataType x) { int _pos = 0; int _index = -1; for(;_pos < seq->_size;++_pos) { if(x == seq->_array[_pos]) { _index = _pos; break; } } if(-1 != _index) { for(;_index < seq->_size - 1;++_index) { seq->_array[_index] = seq->_array[_index + 1]; } seq->_size--; } else { printf(" "); } } // , 。 。 void RemoveAll(SeqList* seq, DataType x) { int _pos = 0; int _index = 0; for(;_pos < seq->_size;++_pos) { if(x != seq->_array[_pos]) { seq->_array[_index] = seq->_array[_pos]; _index++; } } } // 。 void Modify(SeqList* seq, size_t pos, DataType x) { assert(seq); if(pos < 0 || pos > seq->_size) { printf(" "); return; } seq->_array[pos] = x;                                       } int CheckSeqList(SeqList *seq) { if(MAX_SIZE == seq->_size) { return 1; } if(0 == seq->_size) { return 0; } }
    これだけです.実はいくつかの簡単なデータ構造の基本的な思惟です.添削の基本的な考え方.