数据结构-------静态链表的创建_数据

数据结构-------静态链表的创建_结点_02

数据结构-------静态链表的创建_结点_03

数据结构-------静态链表的创建_结点_04

#include <stdio.h>
#define maxSize 6
typedef struct{
int data;
int cur;
}component;

//创建备用链表
void reserveArr(component *array){
for(int i=0;i<maxSize;i++){
array[i].cur=i+1;
array[i].data=-1;
}
array[maxSize-1].cur=0; //链表最后一个结点的游标为0;
}

//提取分配空间
int mallocArr(component *array)
{
//若备用链表非空,则返回分配的结点下标,否则返回 0(当分配最后一个结点时,该结点的游标值为 0)
int i=array[0].cur;
if(array[0].cur)
{
array[0].cur=array[i].cur;
}

return i;

}

//初始化静态链表
int initArr(component *array)
{
reserveArr(array); //创建备用链表
int body=mallocArr(array);
//声明一个变量,把它当指针使,指向链表的最后的一个结点,因为链表为空,所以和头结点重合
int tempBody=body;
for(int i=1;i<4;i++){
int j=mallocArr(array); //从备用链表中拿出空闲的分量
array[tempBody].cur=j; //将申请的空闲分量链接在链表的最后一个结点后面
array[j].data=i; //给新申请的分量的数据域初始化
tempBody=j; //将指向链表最后一个结点的指针后移
}

array[tempBody].cur=0;


return body;

}
//显示
void displayArr(component *array,int body)
{
int tempBody=body;
while(array[tempBody].cur)
{
printf("%d,%d ",array[tempBody].data,array[tempBody].cur);
tempBody=array[tempBody].cur;
}
printf("%d,%d\n",array[tempBody].data,array[tempBody].cur);
}

//添加
void insertArr(component *array,int body,int add,char a)
{
int tempBody=body;//tempBody 做遍历结构体数组使用

//找到要插入位置的上一个结点在数组中的位置
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;

}
//备用链表回收空间的函数,其中 array 为存储数据的数组,k 表示未使用节点所在数组的下标
void freeArr(component *array,int k)
{
array[k].cur=array[0].cur;
array[0].cur=k;
}
//删除结点函数,a 表示被删除结点中数据域存放的数据
void deletArr(component *array,int body,char a)
{
int tempBody=body;
//找到被删除结点的位置
while(array[tempBody].data!=a)
{
tempBody=array[tempBody].cur;
//当 tempBody 为 0 时,表示链表遍历结束,说明链表中没有存储该数据的结点
if(tempBody==0)
{
printf("链表中没有此数据");
return;
}

}
//运行到此,证明有该结点
int del=tempBody;

tempBody=body;
//找到该结点的上一个结点,做删除操作
while(array[tempBody].cur!=del)
{
tempBody=array[tempBody].cur;
}
//将被删除结点的游标直接给被删除结点的上一个结点
array[tempBody].cur=array[del].cur;

//回收被摘除节点的空间
freeArr(array,del);


}
//在以 body 作为头结点的链表中查找数据域为 elem 的结点在数组中的位置
int selectElem(component *array,int body,char elem)
{
int tempBody=body;
int a;
do{
if(array[tempBody].data==elem)
{
printf(".......111");
return tempBody;
}
tempBody=array[tempBody].cur;
}
while(array[tempBody-1].cur!=0);

return -1;


}

//改
void amendElem(component *array,int body,char oldElem.char newElem){
int add=selectElem(array,body,lodElem);
if(add==-1)
{
printf("无更改元素");
return;
}
array[add].data=newElem;
}
int main()
{
component array[maxSize];
int body=initArr(array);
//insertArr(array, body,4,5);
// insertArr(array, body,4,4);
//deletArr(array, body,3);
//deletArr(array, body,2);
int a=selectElem(array, body,2);
// printf("body=%d:\n",body);
printf("查找的位置在%d:\n",a);
printf("静态链表为:\n");
displayArr(array, body);
return 0;

}


运行结果:root@book-virtual-machine:/mnt/hgfs/lua/C++# gcc salman_0119.cpp -o salman_0119
root@book-virtual-machine:/mnt/hgfs/lua/C++# ./salman_0119
静态链表为:
-1,2 1,3 2,4 3,0
root@book-virtual-machine:/mnt/hgfs/lua/C++#



数据结构-------静态链表的创建_数据_05