动态顺序表的基本操作

来源:互联网 发布:如何参加淘宝天天特价 编辑:程序博客网 时间:2024/05/30 21:58
// 空间不够时动态增容
void  CheckCapacity(PSeqListpSeqList)
{
                if(pSeqList->last ==pSeqList->iCapacity)
                {
                                pSeqList->pData = (DataType*)realloc(pSeqList->pData,pSeqList->iCapacity +DEFAULT_INT);
                                pSeqList->iCapacity =pSeqList->iCapacity +DEFAULT_INT;
                }
}

//初始化顺序表
voidInitSeqListD(PSeqListpSeqList)
{
                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;
}

// 尾部插入
voidPushBack(PSeqListpSeqList,DataTypedata)
{
                intend =pSeqList->last;
                assert(pSeqList);
                CheckCapacity(&pSeqList);
                pSeqList->pData[end+1] =data;
                pSeqList->last++;
}


// 尾部删除
voidPopBack(PSeqListpSeqList)
{
                intend =pSeqList->last;
                assert(pSeqList->last > 0);
                pSeqList->pData[end] = 0;
                pSeqList->last--;
}

// 头部插入
voidPushFront(PSeqListpSeqList,DataTypedata)
{
                intbegin = 0;
                intend =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++;
}

// 头部删除
voidPopFront(PSeqListpSeqList)
{
                intbegin = 0;
                assert(pSeqList!=NULL);
                for(begin = 0; begin <=pSeqList->last; begin++)
                {
                                pSeqList->pData[begin] =pSeqList->pData[begin + 1];
                }
                pSeqList->last--;
}

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

// 改变顺序表中元素的个数,Size为元素的个数
voidReSize(PSeqListpSeqList,intSize)
{
                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;
                }
}

voidPrint(PSeqListpSeqList)
{
                intbegin = 0;
                for(begin = 0; begin <=pSeqList->last; begin++)
                {
                                printf("%d\n",pSeqList->pData[begin]);
                }
                returnpSeqList;
}
0 0
原创粉丝点击