【数据结构】顺序表C语言代码参考(适合新手,带注释)
顺序表的结构定义
typedef struct Slist
{
int * data; //使用指针(数组)存放
int maxsize;//定义顺序表的最大数量
int longth; //表示当前顺序表存放元素的数量
}
顺序表初始化的代码
void initslist(sql *l)
{
l->data = (int *)malloc(sizeof(int)*10); //给数据分配空间,数量为int类型字节乘10,格式为整数指针
l->maxsize = 10; //初始分配空间为10个整数
l->length = 0; //表中无元素
}
顺序表查找的代码
void find(sql *l,int number) //遍历数据,匹配输出即可,同理可以直接打印内容
{
for(int i=0;i<l->length;i++){
if(l->data[i]==number){
printf("已找到数据,位于第%d位置\n",i);
}
}
}
顺序表数据添加的代码
void add(sql *l) //这里的添加指的是从刚刚初始化后的表进行添加数据
{
for(i=0; i<l->maxsize; i++) //做一个顺序表的遍历,按顺序填充数据
{
a = 0;
scanf("%d",&a);
//在这里要做一个停止选项,防止用户不想填充所有的元素位置
if(a!=-1) //当用户输入不是-1是,才进行数据填充
{
l->data[i] = a; //将第i个元素赋值为a
l->length++; //此时添加了一个数值,表实际长度加1
}
else
{
break; //直接中止函数
}
}
}
顺序表插入代码
void insert(sql *l, int number, int index)
//插入是指在已经存在数据的表中,再在想要的位置添加数据,可以中间插入,也可以前后插入
//此处的index是数学意义上的第几位
{
if(l->length==l->maxsize)
break; //此处为防止数量超出界限,对于已经满的表无法插入
if(index == maxsize-1)
{
l->data[index] == number; //如果插入的位置位于末尾,那么可以直接添加进入,不需要麻烦的操作
break;
}
for(i=length; i>index-1; i--) //从最后一位开始,此处的最后一位是已有数据的下一位
{
l->data[i]=l->data[i-1]; //每一位的值都等于前一位的值,相当于是前面的逐个向后移动,一直到需要插入的位置
}
l->data[index-1] == number; //此时将需要插入的输入直接存放到那个位置即可
}
顺序表按位删除的代码
void delete_index (sql *l,int index)
//顺序表的删除需要将后续数字全部向前移动,只需要告诉系统表中少一项数据即可
{
for(i=index-1;i<l->length-1;i++) //进行遍历,直到最后一位,原来数据的最后一位可以不用管,只需要声明,此处可存
{
l->data[i]==l->data[i+1];
}
l->length--;
}
顺序表按值删除的代码
void delete_value (sql *l,int number)
{
for(i=0;i<l->length;i++)
{
if(l->data[i]==number)
{
for(j=i;j<l->length-1;j++) //和按位删除同理,多了一步找位
{
l->data[j]==l->data[j+1];
}
l->length--;
}
}
}
顺序表长度增加的代码
void increase (sql *l,int len)
//顺序表长度增加就像屋子装修,需要将原来房间的东西先搬到一个地方,等装好了在放回去
{
*p = l->data; //这一步是将东西搬出去
l->data = (ini *)malloc(sizeof(int)*(l->maxsize+len)); //这一步是装修房子,分配一个新的长度
for(i=0;i<l->length;i++) //搬家要一个一个搬到原来位置上,不能一窝子塞进去,会破坏新建的房子
{
l->data[i]==p[i];//p是一个指针和data一样,通过数组存放;
}
free(p); //这里我们需要声明p不用了,释放掉他
l->maxsize = l->maxsize + len; //表的最大大小不要忘记改
}
本内容是本人亲自编写整理,如有不足请多多指正。