好友
阅读权限20
听众
最后登录1970-1-1
|
ing
发表于 2019-12-30 11:16
为什么游标值一开始就是 6 而不是1?参数 array 是一个长度为7的结构体数组
结构体的配置
初始化了一个长度为7的静态链表
备用链表的创建
完整代码
#include <stdio.h>
#include <stdlib.h>
#define maxSize 7
typedef struct
{
char data;
int cur;
}component;
int initArr(component *array);
//从备用链表上摘下空闲结点
int mallocArr(component *array);
//将 结构体数组 中所有分量连接到备用链表
void reserveArr(component *array);
void insertArr(component * array,int body,int add,char a);
void displayArr(component *array,int body);
int main()
{
component array[maxSize];
int body = initArr(array);
printf("静态链表:\n");
displayArr(array,body);
printf("在位置2上插入结点 'd' \n");
insertArr(array, body, 3, 'd');
displayArr(array, body);
return 0;
}
//创建备用链表
void reserveArr(component * array)
{
//把每个数组分量连接在一起
for (int i = 0; i < maxSize; ++i) {
array.cur = i + 1;
}
//让最后一个结点的游标值为 0
array[maxSize-1].cur = 0;
}
//提取 分配空间(游标的值)
int mallocArr(component *array)
{
//返回不为 0 的节点下标;0 为假,if(0)不会执行,第一次执行返回 1。
int i = array[0].cur;
if (array[0].cur)
{
//负责链表表头的游标值
array[0].cur = array.cur;
}
return i;
}
//初始化静态链表
int initArr(component *array)
{
reserveArr(array);
//第一次执行 mallocArr(array) 得到 array[0]处游标值 1
int body = mallocArr(array);
//当作指针使用的变量,指向链表最后一个结点
//链表为空时和 备用链表表头 重合{ ,1}
int tempBody = body;
//注意,在数组下标为 1 的位置开始赋值
for (int i = 1; i < 5; ++i) {
//从备用链表中拿出空闲的 分量
//第二次执行 mallocArr(array) 得到 array[1]处游标值 2
int j = mallocArr(array);
array[j].data = i;
array[tempBody].cur = j;
//指向链表最后一个结点的指针后移
tempBody = j;
}
//让最后一个结点的游标为0
array[tempBody].cur = 0;
return body;
}
//body表示链表的头结点在数组中的位置,add表示插入元素的位置,a表示要插入的数据
void insertArr(component * array,int body,int add,char a)
{
int tempBody = body;
//找到要插入的位置的上一个结点在数组中的位置
//然后获取它的游标
for (int i = 1; i < add; ++i) {
tempBody = array[tempBody].cur;
}
int insert = mallocArr(array);
array[insert].data = a;
//新插入结点的游标等于直接前驱结点的游标
array[insert].cur = array[tempBody].cur;
//直接前驱结点的游标等于新插入结点所在的数组下标
array[tempBody].cur = insert;
}
void displayArr(component *array,int body)
{
//tempBody 作遍历使用
int tempBody = body;
while (array[tempBody].cur)
{
printf("%c, %d \n",array[tempBody].data,array[tempBody].cur);
tempBody = array[tempBody].cur;
}
printf("%c, %d \n",array[tempBody].data,array[tempBody].cur);
}
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|