不论是干应用还是干底层,第一关就是数据结构和算法,这些都是基本功,今天开始复习数据结构是线性表
线性表简称为表,是零个或多个元素的有穷序列。通常表示为
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)
线性表空间扩展略
线性表的链接表示 待续。。