我写这个子函数,他就说我参数类型有问题,但是我写别的子函数,他也不报错呀
#include<stdio.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
//Status 为函数的类型,其值是函数结果状态代码,如OK等
typedef int Status;
// ElemType为数据元素类型,根据实际情况而定,这里假设为int
typedef int ElemType;
#define MAXSIZE 50 /* 存储空间初始分配量 */
typedef struct
{
ElemType data[MAXSIZE]; /* 数组,存储数据元素 */
int length; /* 表当前有效长度 */
}SqList;
void input(SqList *L)
{
int pre,i=0;
L->length =0;
for(i=0;;i++)
{
scanf("%d",&pre);
if(pre==-1)
{
break;
}
else
{
L->data[i]=pre;
L->length++;
}
}
}
void ListInsert_Sq(SqList *L,int i,int e) //在L中第i个位置之前插入新的数据元素e,L的长度加1。
{
// 插入的位置是i
int j;
int len=L->length ;
int b[len+1];
for(j=0;j<len+1 ;j++)
{
if(j<i)
{
b[j]=L->data [j];
}
else if(j==i)
{
b[j]=e;
}
else
{
b[j]=L->data [j-1];
}
} // 插入后的数全在b 数组中
int k;
L->length =len+1;
for(k=0;k<len+1;k++)
{
L->data [k]=b[k];
}
}
int main()
{
int i;
SqList a;
ElemType e;
input(&a); // 要修改a数组中的数据,所以传地址
ListInsert_Sq(a, 2, 4); // 在第二个位置之前插入e
for(i=0;i<a.length ;i++)
{
printf("%d ",a.data [i]);
}
return 0;
}
比如输入数组为[1,3,4,3,5],插入后输出应该是[1,4,3,4,3,5]
修改见注释,供参考:
#include<stdio.h>
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
//Status 为函数的类型,其值是函数结果状态代码,如OK等
typedef int Status;
// ElemType为数据元素类型,根据实际情况而定,这里假设为int
typedef int ElemType;
#define MAXSIZE 50 /* 存储空间初始分配量 */
typedef struct
{
ElemType data[MAXSIZE]; /* 数组,存储数据元素 */
int length; /* 表当前有效长度 */
}SqList;
void input(SqList* L)
{
int pre, i = 0;
L->length = 0;
for (i = 0;; i++)
{
scanf("%d", &pre);
if (pre == -1)
{
break;
}
else
{
L->data[i] = pre;
L->length++;
}
}
}
void ListInsert_Sq(SqList* L, int i, int e)//在L中第i个位置之前插入新的数据元素e,L的长度加1。
{
// 插入的位置是i //修改
//int j;
//int len = L->length;
//int b[len + 1]; 修改
//for (j = 0; j < len + 1; j++)
//{
// if (j < i)
// {
// b[j] = L->data[j];
// }
// else if (j == i)
// {
// b[j] = e;
// }
// else
// {
// b[j] = L->data[j - 1];
// }
//} // 插入后的数全在b 数组中
int k;
if (i<1 || i>L->length) return;
//L->length = len + 1;
for (k = L->length; k > i - 1; k--) //for (k = 0; k < len + 1; k++) 修改
L->data[k] = L->data[k - 1]; //修改
L->data[k] = e; //修改
L->length++; //修改
}
int main()
{
int i;
SqList a;
ElemType e;
input(&a); // 要修改a数组中的数据,所以传地址
ListInsert_Sq(&a, 2, 4); // 在第二个位置之前插入e
//ListInsert_Sq(a, 2, 4); 修改
for (i = 0; i < a.length; i++)
{
printf("%d ", a.data[i]);
}
return 0;
}