严蔚敏数据结构C语言版 P34 2.17
静态链表的删除操作的思想实践(删除静态链表第i个结点)
/*
严蔚敏数据结构C语言版 P34 2.17
静态链表的删除操作的思想实践(删除静态链表第i个结点)
*/
//头文件
#include<stdio.h>
#include<stdlib.h>
//宏区
#define SIZEMAX 10 //定义最大静态链表结点数
//结构
typedef struct //静态链表的结构
{
int data; //数据域
int cur; //游标
}Sqlink_list, Plink_list[SIZEMAX];
//函数声明
void Link_list_initialize(Plink_list); //初始化静态链表(将所有结点挂在备用头结点上)
int Link_list_allot(Plink_list); //分配空闲结点
void Link_list_build(Plink_list); //建立静态链表
void Link_list_printf(Plink_list); //输出静态链表
void Link_list_delect(Plink_list); //静态链表的删除
//函数区
void Link_list_initialize(Plink_list link_list) //初始化静态链表(将所有结点挂在备用头结点上)
{
int i;
for (i = 0;i < SIZEMAX;i++) //SIZEMAX - 1个元素依次挂在备用头结点上
{
link_list[i].cur = i + 1; //指向下一个结点
}
link_list[SIZEMAX - 1].cur = NULL; //将尾结点挂起
}
int Link_list_allot(Plink_list link_list) //分配空闲结点
{
int i = 1;
if (i) //如果有空闲结点
{
i = link_list[0].cur; //分配一个空闲结点给i
link_list[0].cur = link_list[i].cur; //将备用头结点指向被分配的空闲结点的下一个结点
}
if(NULL == i) //如果没有可分配的备用结点
{
printf("没有可分配的空闲结点了,请重新检查程序!\n"); //提醒用户
exit(0); //正常终止程序
}
return i; //返回当前被分配的空闲结点
}
void Link_list_build(Plink_list link_list) //建立静态链表
{
int len, i, k, c, val;
printf("输入要建立静态链表结点的个数(0 - 8):"); //显示提醒用户输入个数
scanf_s("%d",