顺序表有固定的大小,它头节点没有直接前驱,尾节点没有直接后继,其他节点有且有一个直接前驱和一个直接后继。
代码如下:
#define N 1024
typedef int type;
typedef struct sqlist{
int len; //记录元素个数
type data[N];
}sql,*sqlp;
sqlp create_sql() //创建表头
{
sqlp L=(sqlp)malloc(sizeof(sql));
if(L==NULL)
{
printf("create failed\n");
return 0;
}
return L;
}
sqlp insert_sql(sqlp L,int pos,type data) //按位置插入
{
if(L->len==N)//判断插入位置是否合法
{
return 0;
}
int i;
for(i=(L->len)-1;i>=pos;i--) //找到需要插入位置的前一个元素
{
L->data[i+1]=L->data[i];
}
L->data[pos]=data;
L->len++;
return L;
}
sqlp delete_sql_pos(sqlp L,int pos) //按位置删除
{
if(pos>L->len-1)
{
printf("delete flout\n");
}
int i;
for(i=pos;i<L->len-1;i++)
{
L->data[i]=L->data[i+1];
}
L->len--;
return L;
}
sqlp delete_sql_data(sqlp L,type data) //按内容删除
{
int i,j;
for(i=0;i<L->len;i++)
{
if(L->data[i]==data)
{
for(j;j<L->len-1;j++)
{
L->data[j]=L->data[j+1];
}
i--;
L->len--;
}
}
return L;
}
sqlp change_sql_pos(sqlp L,int pos,type data) //按位置修改
{
if(pos<L->len)
{
L->data[pos]=data;
}
return L;
}
sqlp change_sql_data(sqlp L,type mesg,type data) //按内容修改
{
int i;
for(i=0;i<L->len;i++)
{
if(L->data[i]==mesg)
{
L->data[i]=data;
}
}
return L;
}
int search_sql_pos(sqlp L,type data) //按内容查询位置
{
int i;
for(i=0;i<L->len;i++)
{
if(L->data[i]==data)
{
printf("pos in the %d\n",i);
}
}
return 0;
}
type search_sql_data(sqlp L,int pos) //按位置查询内容
{
printf("data in the %d\n",L->data[pos]);
}
int main(int argc, char *argv[]) //测试
{
sqlp L=create_sql();
if(L==NULL)
{
printf("create fulot\n");
}
insert_sql(L,0,1);
insert_sql(L,0,2);
insert_sql(L,0,2);
insert_sql(L,0,3);
insert_sql(L,0,4);
// delete_sql_pos(L,2);
//delete_sql_data(L,2);
// change_sql_pos(L,0,5);
change_sql_data(L,2,9);
search_sql_pos(L,9);
search_sql_data(L,0);
show_sql(L);
return 0;
}