#include创建线性表#include"a.h" #include #include
//create
seqList* list()
{
seqList *S=(seqList*)malloc(sizeof(seqList));
if(NULL == S)
{
printf("apply failed!n");
return NULL;
}
memset(S->data,0,sizeof(S->data));
S->len=0;
printf("apply successful!n");
return S;
}
判空判满
//judge empty
int listEmpty(seqList *S)
{
if(NULL==S)
{
printf("list not legetimata!n");
exit(0);
}
return S->len==0?1:0;
}
//judge full
int listFull(seqList *S)
{
return S->len==MAX?1:0;
}
添加数据
//add data
int listAdd(seqList *S,datatype e)
{
//full?
if(listFull(S))
{
printf("list fulln");
return -1;
}
//insert
S->data[S->len]=e;
//len
S->len++;
printf("add successful!n");
return 0;
}
遍历
//traverse
int listTraver(seqList *S,int n)
{
if(listEmpty(S))
{
printf("data empty!n");
return -1;
}
int i=0;
for(i=0;idata[i]);
}
printf("n");
return 0;
}
按位添加
//insert data(pos)
int listInsert(seqList *S,int pos,datatype e)
{
if(listFull(S))
{
printf("data full!n");
return -1;
}
int i;
for(i=S->len;i>pos-1;i--)
{
S->data[i]=S->data[i-1];
}
S->data[pos-1]=e;
S->len++;
printf("insert successful!n");
return 0;
}
按位删除
//delate data(pos)
int listDelate(seqList *S,int pos)
{
if(listEmpty(S))
{
printf("data empty!n");
return -1;
}
int i;
for(i=pos-1;ilen;i++)
{
S->data[i]=S->data[i+1];
}
S->len--;
printf("delate successful!n");
return 0;
}
按范围删除
//delate by line
int listDelateByline(seqList *S,int line1,int line2)
{
listEmpty(S);
int i;
int k;
k=line2-line1;
for(i=line1;ilen;i++)
{
S->data[i-1]=S->data[k+i];
}
S->len=S->len-k-1;
printf("delate byline successful!n");
return 0;
}
按位查找或者按值查找
//search data(pos or value)
datatype listSearchPos(seqList *S,int pos)
{
if(listEmpty(S))
{
printf("data empty!n");
return -1;
}
printf("find!n");
return S->data[pos-1];
}
int listSearchValue(seqList *S,datatype e)
{
listEmpty(S);
int i;
int j=0;
for(i=0;ilen;i++)
{
if(e==S->data[i])
{
printf("find!n");
return i+1;
}
j++;
}
if(j==S->len-1)
{
printf("not find!n");
return -1;
}
}
选择排序和冒泡排序
//sort data
int listSortSelect(seqList *S)
{
listEmpty(S);
int i,j,k;
for(i=0;ilen;i++)
{
for(j=i;jlen;j++)
{
if(S->data[i]>S->data[j])
{
k=S->data[i];
S->data[i]=S->data[j];
S->data[j]=k;
}
}
}
printf("sort select successful!n");
return 0;
}
int listSortBubbling(seqList *S)
{
listEmpty(S);
int i,j,k;
for(i=0;ilen;i++)
{
for(j=0;jlen;j++)
{
if(S->data[j]data[j+1])
{
k=S->data[j];
S->data[j]=S->data[j+1];
S->data[j+1]=k;
}
}
}
printf("sort bubbling successful!n");
return 0;
}
按位替换和按值替换
//revise data(pos or value)
int listRevisePos(seqList *S,int pos,datatype new_e)
{
listEmpty(S);
if(pos<0 || pos>S->len)
{
return -1;
}
S->data[pos-1]=new_e;
printf("revise successful!n");
return 0;
}
int listReviseValue(seqList *S,datatype old_e,datatype new_e)
{
listEmpty(S);
int i,j=0;
for(i=0;ilen;i++)
{
if(S->data[i]==old_e)
{
S->data[i]=new_e;
j++;
}
}
if(j==0)
{
printf("revise failedn");
return -1;
}
printf("revise successful!n");
return 0;
}
去重
//remove duplicates
int listDuplicates(seqList *S)
{
listEmpty(S);
int i,j,k;
int x;
for(i=0;ilen;i++)
{
for(j=i+1;jlen;j++)
{
if(S->data[i]==S->data[j])
{
listDelate(S,j+1);
j--;
}
}
}
printf("duplicate successful!n");
return 0;
}
释放
//release data
void listRelease(seqList *S)
{
if(NULL!=S)
{
free(S);
}
S=NULL;
printf("release wuccessful!n");
}
.h文件
#ifndef __A__
#define __A__
#define MAX 20
typedef int datatype;
typedef struct
{
datatype data[MAX];
int len;
}seqList;
seqList* list();
//judeg empty
int listEmpty(seqList *S);
//judge full
int listFull(seqList *S);
//add data
int listAdd(seqList *S,datatype e);
//traverse
int listTraver(seqList *S,datatype n);
//insert data(pos)
int listInsert(seqList *S,int pos,datatype e);
//delate data(pos or byline)
int listDelate(seqList *S,int pos);
int listDelateByline(seqList *S,int line1,int line2);
//search data(pos or value)
datatype listSearchPos(seqList *S,int pos);
int listSearchValue(seqList *S,datatype e);
//sort data
int listSortSelect(seqList *S);
int listSortBubbling(seqList *S);
//revise data(pos or value)
int listRevisePos(seqList *S,int pos,datatype new_e);
int listReviseValue(seqList *S,datatype old_e,datatype new_e);
//remove duplicates
int listDuplicates(seqList *S);
//release data
void listRelease(seqList *S);
#endif
#include#include"a.h" #include int main(int argc,const char *argv[]) { seqList *S=list(); if(NULL==S) { return -1; } printf("add 2,3,4n"); listAdd(S,2); listAdd(S,3); listAdd(S,4); listTraver(S,S->len); printf("n"); printf("pos=2,value=9n"); listInsert(S,2,9); listTraver(S,S->len); printf("n"); printf("pos=3n"); listDelate(S,3); listTraver(S,S->len); printf("n"); printf("search pos=2n"); printf("value=%dnn",listSearchPos(S,2)); printf("search value=9n"); printf("pos=%dnn",listSearchValue(S,9)); printf("select sortn"); listSortSelect(S); listTraver(S,S->len); printf("n"); printf("bubbling sortn"); listSortBubbling(S); listTraver(S,S->len); printf("n"); printf("pos=2,new value=5n"); listRevisePos(S,2,5); listTraver(S,S->len); printf("n"); printf("old value=5,new value=6n"); listReviseValue(S,5,6); listTraver(S,S->len); printf("n"); printf("add 2,2,3,6,3n"); listAdd(S,2); listAdd(S,2); listAdd(S,3); listAdd(S,6); listAdd(S,3); listTraver(S,S->len); printf("n"); listDuplicates(S); listTraver(S,S->len); printf("n"); printf("add 2n"); listAdd(S,2); listTraver(S,S->len); printf("line1=2,line2=4n"); listDelateByline(S,2,4); listTraver(S,S->len); listRelease(S); return 0; }



