您的位置:首页 > 其它

链表的游标实现

2017-07-27 11:12 357 查看
//对于不支持指针的语言,链表可以用游标来表示
//链表的游标实现
//array数组分两部分,一部分为链表部分,有一个独立头节点,下标为1
//另一部分为freelist部分,也有独立的一个节点,下标为0,对于此部分,相当于一个栈
//进行malloc操作时,从开头(下标0后)取空间
//进行free操作时,被free的数放到开头(下标0后)
#define MAXN 10
struct node
{
int element;
int next;
};
void free(struct node array[],int position)
{
array[position].next=array[0].next;
array[0].next=position;
}
int malloc(struct node array[])
{
int position;
position=array[0].next;
array[0].next=array[position].next;
return position;
}
int FindpreviousofDelete(struct node array[],int head,int number)
{
int position;
position=head;
while(array[array[position].next].element!=number&&array[position].next!=0)
position=array[position].next;
return position;
}
int FindpreviousofInsert(struct node array[],int head,int number)
{
int position=head;
while(array[position].next<=number&&array[position].next!=0)
position=array[position].next;
return position;
}
void Insert(struct node array[],int head,int number)
{
int position=malloc(array);
if(position==0){
printf("Out of space!\n");
return;
}
int former=FindpreviousofInsert(array,head,number);
array[position].element=number;
array[position].next=array[former].next;
array[former].next=position;

}
void Delete(struct node array[],int head,int number)
{
int position;
position=FindpreviousofDelete(array,head,number);
if(array[position].next==0){
printf("Not exist!\n");
return;
}
array[position].next=array[array[position].next].next;
free(array,array[position].next);
}
int main()
{
//新建
struct node array[MAXN];
int head=1;
array[head].next=0;
array[0].next=2;
for(int i=2;i<MAXN-1;i++)
array[i].next=i+1;
array[MAXN-1].next=0;
//插入
Insert(array,head,10);
//删除
Delete(array,head,10);
//查找
//Find(array,head,2);
//遍历
//Print(array,head);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: