动态顺序表的初始化及增删查改
#pragma once
#include<iostream>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
typedef int DataType;
typedef struct SeqList
{
DataType* _array;
size_t _size;
size_t _capacity;
}SeqList;
void InitSeqList(SeqList *pSeq)
{
assert(pSeq);
pSeq->_capacity=10;
pSeq->_array=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity);
pSeq->_size=0;
}
void PrintSeqList(SeqList *pSeq)
{
int i=0;
assert(pSeq);
for(;(size_t)i<pSeq->_size;i++)
{
printf("%d ",pSeq->_array[i]);
}
printf("\n");
}
void PushBack(SeqList *pSeq, DataType x)
{
DataType* tmp;
assert(pSeq);
if(pSeq->_size>=pSeq->_capacity)
{
pSeq->_capacity *=2;
tmp=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity);
memcpy(tmp,pSeq->_array,sizeof(DataType)*pSeq->_size);
free(pSeq->_array);
pSeq->_array=tmp;
}
else
{
pSeq->_array[pSeq->_size++]=x;
}
}
void Popback(SeqList* pSeq)
{
assert(pSeq);
if(pSeq->_size==0)
{
printf("SeqList is empty!\n");
return;
}
else
{
//pSeq->_array[--pSeq->_size]=0;//和[--pSeq->_size]有什么区别
pSeq->_size--;
}
}
void PushFront(SeqList *pSeq,DataType x)
{
DataType* tmp;
int i;
assert(pSeq);
if(pSeq->_size>=pSeq->_capacity)
{
pSeq->_capacity *=2;
tmp=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity);
memcpy(tmp,pSeq->_array,sizeof(DataType)*pSeq->_size);
free(pSeq->_array);
pSeq->_array=tmp;
}
else
{
for(i=pSeq->_size;i>0;i--)
{
pSeq->_array[i]=pSeq->_array[i-1];
}
pSeq->_array[i]=x;
pSeq->_size++;
}
}
void PopFront(SeqList*pSeq)
{
int i;
assert(pSeq);
if(pSeq->_size==0)
{
printf("SeqList is null!");
return;
}
else
{
for(i=0;i<pSeq->_size;i++)
{
pSeq->_array[i]=pSeq->_array[i+1];
}
pSeq->_size--;
}
}
void Insert(SeqList *pSeq,size_t pos,DataType x)
{
size_t i;
DataType* tmp;
assert(pSeq);
if(pSeq->_size>=pSeq->_capacity)
{
pSeq->_capacity *=2;
tmp=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity);
memcpy(tmp,pSeq->_array,sizeof(DataType)*pSeq->_size);
free(pSeq->_array);
pSeq->_array=tmp;
}
else
{
for(i=pSeq->_size;i>=pos;i--)
{
pSeq->_array[i+1]=pSeq->_array[i];
}
pSeq->_array[pos]=x;
pSeq->_size++;
}
}
void Erase(SeqList *pSeq,size_t pos)//删掉某一位置的元素
{
size_t i;
assert(pSeq);
if(pos>pSeq->_size)
{
printf("Seqlist is not exist!");
}
else
{
for(i=pos;i<pSeq->_size;i++)
{
pSeq->_array[i-1]=pSeq->_array[i];//换成这个为什么不行 pSeq->_array[i]=pSeq->_array[i+1];
}
pSeq->_size--;
}
}
int Find(SeqList *pSeq,DataType x)
{
int i;
assert(pSeq);
for(i=0;i<=pSeq->_size;i++)
{
if(x==pSeq->_array[i])
{
return i;
}
else
{
return -1;
}
}
}
void Remove(SeqList *pSeq,DataType x)
{
int i,ret;
assert(pSeq);
ret=Find(pSeq,x);
if(ret==-1)
{
printf("SeqList is not exist!\n");
}
else
{
for(i=ret;i<pSeq->_size;i++)
{
pSeq->_array[i]=pSeq->_array[i+1];
}
pSeq->_size--;
}
}
void RemoveAll(SeqList *pSeq,DataType x)
{
size_t FirstIndex=0;
size_t SecondIndex=0;
size_t count=0;
assert(pSeq);
while(FirstIndex<pSeq->_size)
{
if(pSeq->_array[FirstIndex]==x)
{
count++;
}
else
{
pSeq->_array[SecondIndex]=pSeq->_array[FirstIndex];
SecondIndex++;
}
FirstIndex++;
}
pSeq->_size=count;
}
void Modify(SeqList *pSeq,size_t pos,DataType x)
{
assert(pSeq);
pSeq->_array[pos]=x;
}本文出自 “sunshine225” 博客,请务必保留此出处http://10707460.blog.51cto.com/10697460/1754046
原文:http://10707460.blog.51cto.com/10697460/1754046