数据结构之顺序表的插入实现

#include<stdio.h>
#include<stdlib.h>
#define Size 6
#define sizeadd 4 //增加的内存空间
typedef struct table{
int *elem;
int size;
int length;
}table;
table init_table()
{
table tab;
tab.elem=(int *)malloc(sizeof(int)*Size);
if(!tab.elem)
{
printf(“申请内存失败\n”);
exit(0);
}
tab.size=Size;
tab.length=0;
return tab;
}
table scanf_table(table tab)
{
for(int i=0;i<Size;i++)
{
scanf("%d",&tab.elem[i]);
tab.length++;
}
return tab;
}
void printf_table(table tab)
{
for(int i=0;i<tab.length;i++)
{
printf("%d ",tab.elem[i]);
}
}
//以下是顺序表的插入操作代码实现
table insert_table(table tab,int elem,int locate){
if(locate+1>tab.size||locate<1)
printf(“插入的位置不符合标准\n”);
if(tab.length>=tab.size)
{
tab.elem=(int )realloc(tab.elem,sizeof(int)(tab.size+sizeadd));
}
if(!tab.elem)
{
printf(“存储分配失败\n”);
}
tab.size+=sizeadd;//存储容量增加了
for(int i=tab.length-1;i>=locate-1;i–)
{
tab.elem[i+1]=tab.elem[i];
}
tab.elem[locate-1]=elem;
tab.length++;
return tab;//tab是table类型的,所以这个函数的返回类型也是table
}
int main()
{
table tab=init_table();//可抽象理解为初始化一个顺序表,tab是局部变量,所以没事
tab= scanf_table(tab);/由于结构体变量的参数传递也是单向传递,所以只写成 scanf_table(tab)是不对的,这样的话length的值还是0,在scanf_table()中加上return后就可以将值为6的length返回,返回的length实际上是scanf的length,而这个函数的length值为6,再赋值给main函数的tab的length/
tab=insert_table(tab,7,3);//同理
printf_table(tab);
return 0;
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值