【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;
}
}
これだけです.実はいくつかの簡単なデータ構造の基本的な思惟です.添削の基本的な考え方.