笔记--静态链表

链表的游标实现

有一些语言不支持指针如BASIC、FORTRAN等,如果需要链表而又不能使用指针,就需要使用另外的实现方法。其中之一就是游标实现法。
在链表的指针实现有两个重要的特点:
1.数据存储在一组结构体中,每一个结构体包含有数据以及指向下一个结构体的指针。
2.一个新的结构体可以通过调用malloc而从系统全局内存(global memory)得到,并可通过free而被释放。
所以游标法必须能够模仿实现这两条特性。满足条件1的方法是要有一个全局的结构体数组。对于该数组中的任何单元,其数组下标可以用来代表一个地址。
(来自《数据结构与算法分析----C语言描述》)


对链表游标实现的声明(模拟条件1):

typedef int ElemType;
typedef ElemType Position;
typedef ElemType List;
#define SpaceSize 500
struct Node//定义结构体
{
 ElemType data;
 Position next;//定义游标 
};
struct Node CursorSpace[SpaceSize];//定义结构体全局数组

现在,需要模拟条件2,实现mallocfree的功能。
静态链表中malloc的实现:

Position CursorAlloc()//实现malloc 
{
 Position p;
 p=CursorSpace[0].next;
 CursorSpace[0].next=CursorSpace[p].next;
 return p;
 } 

静态链表中free的实现:

void CursorFree(Position p)//实现free 
 {
  CursorSpace[p].next=CursorSpace[0].next;
  CursorSpace[0].next=p;
 }

静态链表的初始化创建:

void  InitializeCursorSpace()//初始化创建 
{
 for(i=0;i<SpaceSize-1;i++)
 {
  CursorSpace[i].next=i+1;
 }
 CursorSpace[SpaceSize-1].next=0;
}

判断静态链表是否为空:

int IsEmpty(List L)//判断是否为空 
{
 return(CursorSpace[L].next==0)
}

测试p是否为静态链表的末尾

int IsLast(Position p,List L)//判断是否为最后一个元素
{
 return(CursorSpace[p].next==0);
 } 

静态链表的查找

Position Find(ElemType x,List L)//查找位置 
{
 Position p;
 p=CursorSpace[L].next;
 while(p&&CursorSpace[p].data!=x)
 {
  p=CursorSpace[p].next;
 }
 return p;
 } 

静态链表的删除

void Delete(ElemType x,List L)//删除操作 
{
 Position p,temp;
 p=Find(x,L);
 if(!IsEmpty(p,L))
 {
  temp=CursorSpace[p].next;
  CursorSpace[p].next;=CursorSpace[temp].next;
  CursorFree(temp);
 }
 } 

静态链表的插入操作

void Insert(ElemType x,List L,Position p)//插入操作 
 {
  Position temp;
  temp=CursorAlloc();
  if(Temp==0)
  {
   printf("Out of space!");
  }
  CursorSpace[temp].data=x;
  CursorSpace[temp].next=CursorSpace[p].next;
  CursorSpace[p].next=temp;
  } 

文章资源来源是《数据结构与算法----C语言描述》,仅为本人的读书笔记,方便复习与查看,如有错误,请指出。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值