#include"stdio.h"
#include"windows.h"
#define maxsize 10
typedef struct {
int a[maxsize];//设置类型及最大长度
int last;//记录尾数据位置
}A;//重命名为A
typedef struct {
int a[maxsize];//设置类型及最大长度
int last;//记录尾数据位置
}B; //重命名为*A指针
//线性表插入函数
int Myinsert1(A b, int i, int j)// i为插入位置,j为具体元素
{
int x;
while (b.last < maxsize - 1 && b.last<=5)
{
if (i > b.last || i < 0)
{
printf("该插入位置不合法");
return 0;
}
for (x = b.last; x >= i; x--)
{
if(b.last<maxsize)
{
b.a[x + 1] = b.a[x];
}
}
b.a[i] = j;
b.last++;
}
return 1;
}
int Myinsert(B * b1, int i, int j)// i为插入位置,j为具体元素
{
int x; int k = b1->last + 1;
while (b1->last < maxsize - 1 && b1->last <k )//b1->last<k保证只执行一次
{
if (i > b1->last || i < 0)
{
printf("该插入位置不合法");
return 0;
}
for (x = b1->last; x >= i; x--)
{
if (b1->last < maxsize)
{
b1->a[x + 1] = b1->a[x];
}
}
b1->a[i] = j;
b1->last++;
}
return 1;
}
int main()
{
//结构体是聚合类型,若内部有数组,要在在定义时直接初始化;后期内部数组不能改
A b = { {5, 2, 5, 3, 6},4 }; //创建A类型实例b;
/*int i;
for (i = 0; i < 2; i++)
{
printf("%d %d ", b[i]);
printf("\n");
}*/
B bb= { {5, 2, 5, 3, 6},4 }; //创建A类型实例b;,
B *b1;b1 = &bb;
//int ret = Myinsert(b,2,10);
int ret = Myinsert(b1,2,10);
int i;
printf("%d ", bb.last);
printf("\n");
if (ret == 1)
{
for(i=0;i<maxsize;i++)
printf("%d ",bb.a[i]);
}
system("pause");
return 0;
}
上边为 定义为结构体指针变量
下边为 定义成结构体变量
```c
int main()
{
//结构体是聚合类型,若内部有数组,要在在定义时直接初始化;后期内部数组不能改
A b = { {5, 2, 5, 3, 6},4 }; //创建A类型实例b;
/*int i;
for (i = 0; i < 2; i++)
{
printf("%d %d ", b[i]);
printf("\n");
}*/
B bb= { {5, 2, 5, 3, 6},4 }; //创建A类型实例b;,
B *b1;b1 = &bb;
int ret = Myinsert1(b,2,10);
//int ret = Myinsert(b1,2,10);
int i;
printf("%d ", b.last);
printf("\n");
if (ret == 1)
{
for(i=0;i<maxsize;i++)
printf("%d ",b.a[i]);
}
system("pause");
return 0;
}
我们发现定义成结构体变量时 结构体内的数组值(即线性表)可以修改,定义成结构i变量时 则不能修改