头文件
#ifndef _SEQLIST_H_
#define _SEQLIST_H_
#include<stdio.h>
#define MAX_SIZE 20
#define Elemtype char
typedef struct ListNode
{
Elemtype data;
int cur;
}ListNode;
typedef ListNode StaticList[MAX_SIZE];
int Malloc_SL(StaticList &space);
void Free_Sl(StaticList &space,int k);
void InitSList(StaticList &space); //& 引用类型,即space是传递参数SL的别名,使数组类型更简单,以引用的方式,避免使用数组指针
void Insert(StaticList &space,Elemtype x);
void Delete(StaticList &space);
void ShowSList(StaticList &space);
#endif //_SEQLIST_H_
源文件(方法)
/*静态链表:用数组描述(模拟)的链表*/
#include "Staticlist.h"
/*申请备用空间*/
int Malloc_SL(StaticList &space)
{
int i = space[1].cur;
/*存在多余的备用空间*/
if(space[1].cur != 0)
{
space[1].cur = space[i].cur;
}
return i; //返回申请的备用空间i位置
}
//回收空间
void Free_Sl(StaticList &space,int k)
{
space[k].cur = space[1].cur;
space[1].cur = k;
}
void InitSList(StaticList &space)
{
for(int i = 1;i < MAX_SIZE-1;i++)
{
space[i].cur = i+1;
}
space[MAX_SIZE-1].cur = 0;
space[0].cur = -1;
}
/*插入数据*/
void Insert(StaticList &space, Elemtype x)
{
int i = Malloc_SL(space); //申请空间
if(i == 0)
{
printf("StaticList is full!\n");
return;
}
space[i].data = x;
/*插入节点为第一个节点*/
if(space[0].cur == -1)
{
space[i].cur = -1;
}
/*不是第一个节点只需要头插*/
else
{
space[i].cur = space[0].cur;
}
space[0].cur = i;
}
/*头删,删除元素+回收节点*/
void Delete(StaticList &space)
{
int i = space[0].cur;
space[i].data = 0;
space[0].cur = space[i].cur; //回收节点
Free_Sl(space,i); //合并备用空间,即释放节点
}
void ShowSList(StaticList &space)
{
int i = space[0].cur;
while(i != -1)
{
printf("%c-->",space[i].data);
i = space[i].cur;
}
printf("Nul.\n");
}