顺序表
#include <stdio.h>
#include <malloc.h>
//存储方式:连续存储
//对于一旦建立就不需要经常插入或者删除的可以使用顺序表,因为其查找,插入,删除复杂度较高
struct SeqList
{
int MAXNUM;
int n;
unsigned char *element;
};
typedef struct SeqList *mySeqList;
mySeqList createNull_seqList(int n)
{
mySeqList seqlist = (mySeqList)malloc(sizeof(struct SeqList));
if (seqlist!= NULL)
{
seqlist ->element = (unsigned char*)malloc(sizeof(unsigned char)*n);
if(seqlist ->element)
{
seqlist -> MAXNUM = n;
seqlist ->n = 55;
return seqlist;
}
else free(seqlist);
}
printf("out of space!!");
return NULL;
}
int isNullList_seq(mySeqList seqlist)
{
return (seqlist->n ==0);
}
//复杂度
int locate_seq(mySeqList list,unsigned char x)
{
int q;
for (q=0;q<list->n;q++)
{
if(list->element[q] ==x) return q;
}
return -1;
}
//复杂度:(n-1)/2
int insertPre_seq(mySeqList list,int p,unsigned char x)
{
int q;
if(list->n >=list->MAXNUM)
{
printf("overflow!!!");
return -1;
}
if (p <0 || p > list->n)
{
printf("n is %d\n",list->n);
printf("not exist\n");
return -1;
}
//移动时从后面开始
for(q=list->n-1;q>=p;q--)
list->element[q+1] = list->element[q];
list ->element[p] =x;
list ->n= list->n+1;
return 1;
}
int deleteP_seq(mySeqList list,int p)
{
int q;
if (p<0 || p>list->n-1)
{
printf("not existed");
return -1;
}
//删除时从前面开始移动
for(q=p; q<list->n-1; q++)
list ->element[q] = list ->element[q+1];
list ->n =list->n-1;
return 1;
}
void main()
{
int is_success;
int position;
mySeqList mySeq_List = createNull_seqList(100);
is_success = insertPre_seq(mySeq_List,30,40);
position = locate_seq(mySeq_List,40);
printf("position is %d",position);
}