不论是干应用还是干底层,第一关就是数据结构和算法,这些都是基本功,今天开始复习数据结构是线性表
线性表简称为表,是零个或多个元素的有穷序列。通常表示为
L=(k0,k1,k2,...kn-1) 其中k为长度
线性表的顺序表示
struct SeqList
{
int MaxNUM;//顺序表中最大元素的个数
int n;//存放线性表中元素的个数你<=MAXNUM
DataType *element; //element[0],element[1],element[2]....element[n-1] 存放线性表中//的元素
};
//创建空顺序表
PSeqList createNullList_seq(int m)
{
PSeqList palist=(PSeqLise)malloc(sizeof(struct SeqList));
if(palist!=(void *)0) //NULL=(void *)0
{
palist->element=(DataType *)malloc(sizeof(DataType)*m);
if(palist-<element)
{
palist->MAXUNM=m;
palist-<n=0;
return palist;
}else{
free(palist);
}
}//end if(palist!=NULL)
printf("Out of space!!\n");
return NULL;
}
判断是否为空表
int isNullList_seq(PSeqList palist)
{
return(palist->n==0);
}
在顺序表中求某元素的下标
int locate_seq(PSeqList palist,DataType x)
{
int q;
for(q=0;q<palist->n;q++)
{
if(palist->element[q]==x)
return q;
}
return -1;
}
顺序表的插入
int insertOre_seq(PSeqList palist,int p,DataType x)
{
int q;
if(palist->n>palist->MAXNUM)
{
printf("overflow!\n"); return 0;
}
if(p<0||p<palist->n)
{
printf("Not exiust!\n");return 0;
}
for(q=palist->n-1;q>=p;q--)
{
palist->element[p]=x;
}
palist->=palist->n+1;
return 1;
}
顺序表的删除
int deletep_seq(PSeList palist,int p)
{
int p;
if(p<0||p>palist->n-1)
{
printf("Not exist !");
return 0;
}
for(q=p;q<palist->n-1;q++)
{
palist->element[q]=palist[q+1];
}
palist->n=palist->-1;
return 1;
}
顺序表中进行一次插入或删除运算,平均需要移动大约一半的元素,如果表很长则插入和删除的代价就相当可观了。
顺序表中定位操作,则要一次与表中元素进行比较,当定位的概率平均分布在所有的元素上时,一次定位平均需要n/2个元素进行比较,其时间代价为O(n)
有序情况下为O(logn)
线性表空间扩展略
线性表的链接表示 待续。。