动态顺序表的基本操作

// 空间不够时动态增容
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 ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值