typedef struct {
elemtype data[sizemax];
int length;
}seqlist;
void InitList(seqlist* a, int b) {
int i;
for (i = 0; i < b; i++)
{
a->data[i] = 0;
};
};
void Insertlist(seqlist* a, int b, int c)
{
for (int j = sizeof(a) / sizeof(a[0])- 1; j >= c - 1; j--)
{
a->data[j + 1] = a->data[j];};
a->data[c - 1] = b;
};
int main()
{
int base[9] = { 1,2,10,4,5,6,3,8 };
seqlist insert;
int N = sizeof(base) / sizeof(base[0]);
InitList(&insert, N);
for (int i = 0; i < 9; i++) {
insert.data[i] = base[i];
};
Insertlist(&insert, 7, 3);
return 0;
}
a是指针,sizeof(a)得到的大小是指针的大小,在32为系统中,指针的大小是4,64位系统中,指针的大小是8.。所以你的逻辑是错误的。
既然你的结构体中已经定义了length来记录数组的实际长度,所以,在插入链表的时候,用a->length就可以了。
代码修改如下(修改部分代码中有注释):
typedef struct {
elemtype data[sizemax];
int length;
}seqlist;
void InitList(seqlist* a, int b) {
int i;
for (i = 0; i < b; i++)
{
a->data[i] = 0;
};
a->length = b; //修改1 这里记录初始长度
};
void Insertlist(seqlist* a, int b, int c)
{
for (int j = a->length -1; j >= c - 1; j--) //修改2 j从a->length-1开始
{
a->data[j + 1] = a->data[j];
};
a->data[c - 1] = b;
a->length += 1; //修改3 长度+1
};
int main()
{
int base[9] = { 1,2,10,4,5,6,3,8 };
seqlist insert;
int N = sizeof(base) / sizeof(base[0]);
InitList(&insert, N);
for (int i = 0; i < 9; i++) {
insert.data[i] = base[i];
};
Insertlist(&insert, 7, 3);
return 0;
}
for (int j = sizeof(a) / sizeof(a[0])- 1; j >= c - 1; j--)
不能这么求大小啊
明明线性表中有length这个表示当前线性表有效元素数量的值为啥不用啊。你这sizeof使用完全是错误的
在初始化的时候,给length附上值
void Insertlist(seqlist* a, int b, int c)
{
for (int j = length- 1; j >= c - 1; j--)
{
a->data[j + 1] = a->data[j];
}
a->data[c - 1] = b;
}
int main()
{
int base[9] = { 1,2,10,4,5,6,3,8 }; //这里只有8个值啊!!
seqlist insert;
int N = sizeof(base) / sizeof(base[0]);
InitList(&insert, N);
for (int i = 0; i < 9; i++) {
insert.data[i] = base[i];
};
insert.length = 9;
Insertlist(&insert, 7, 3);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!