动态顺序表的基本操作

// 空间不够时动态增容
void   CheckCapacity( PSeqList pSeqList )
{
                 if ( pSeqList ->last == pSeqList ->iCapacity)
                {
                                 pSeqList ->pData = ( DataType *)realloc( pSeqList ->pData, pSeqList ->iCapacity + DEFAULT_INT );
                                 pSeqList ->iCapacity = pSeqList ->iCapacity + DEFAULT_INT ;
                }
}

//初始化顺序表
void InitSeqListD( PSeqList pSeqList )
{
                 assert ( pSeqList );
                 pSeqList ->pData = ( DataType *)malloc( INIT_SIZE * sizeof ( DataType ));
                memset( pSeqList ->pData, 0, INIT_SIZE * sizeof ( DataType )); 
                 pSeqList ->iCapacity = INIT_SIZE ;
                 pSeqList ->last = -1;
}

// 尾部插入
void PushBack( PSeqList pSeqList , DataType data )
{
                 int end = pSeqList ->last;
                 assert ( pSeqList );
                CheckCapacity(& pSeqList );
                 pSeqList ->pData[end+1] = data ;
                 pSeqList ->last++;
}


// 尾部删除
void PopBack( PSeqList pSeqList )
{
                 int end = pSeqList ->last;
                 assert ( pSeqList ->last > 0);
                 pSeqList ->pData[end] = 0;
                 pSeqList ->last--;
}

// 头部插入
void PushFront( PSeqList pSeqList , DataType data )
{
                 int begin = 0;
                 int end = pSeqList ->last;
                 assert ( pSeqList );
                CheckCapacity(& pSeqList );
                 for (end = pSeqList ->last; end>=begin; end--)
                {
                                 pSeqList ->pData[end+1] = pSeqList ->pData[end];
                }
                 pSeqList ->pData[begin] = data ;
                 pSeqList ->last++;
}

// 头部删除
void PopFront( PSeqList pSeqList )
{
                 int begin = 0;
                 assert ( pSeqList != NULL );
                 for (begin = 0; begin <= pSeqList ->last; begin++)
                {
                                 pSeqList ->pData[begin] = pSeqList ->pData[begin + 1];
                }
                 pSeqList ->last--;
}

// 销毁动态顺序表
void DestroyList( PSeqList pSeqList )
{
                 pSeqList ->iCapacity = 0;
                 pSeqList ->last = 0;
                free( pSeqList ->pData);
                 pSeqList ->pData = NULL ;
}

// 改变顺序表中元素的个数,Size为元素的个数
void ReSize( PSeqList pSeqList , int Size )
{
                 assert ( pSeqList );
                 if ( Size < pSeqList ->last)
                {
                                 //新分配元素个数小于顺序表长度,为缩小,顺序表长度,容量均改变
                                 pSeqList ->pData = ( DataType *)realloc( pSeqList ->pData, Size * sizeof ( DataType ));
                                 pSeqList ->last= Size ;
                                 pSeqList ->iCapacity = Size ;
                }
                 else
                {
                                 //如果新分配元素个数大于顺序表长度,顺序表长度不变,容量改
                         pSeqList ->pData = ( DataType *)realloc( pSeqList ->pData, Size * sizeof ( DataType ));
                                 pSeqList ->iCapacity = Size ;
                }
}

void Print( PSeqList pSeqList )
{
                 int begin = 0;
                 for (begin = 0; begin <= pSeqList ->last; begin++)
                {
                                printf( "%d\n" , pSeqList ->pData[begin]);
                }
                 return pSeqList ;
}

你可能感兴趣的:(C语言,顺序表)