单链表--游标实现

来源:互联网 发布:linux mount 原理 编辑:程序博客网 时间:2024/05/22 00:07

对于一些语言,没有指针,所以用数组是实现链表的一种方式

//链表的游标实现//array数组分两部分,一部分为链表部分,有一个独立头节点,下标为1//另一部分为freelist部分,也有独立的一个节点,下标为0,对于此部分,相当于一个栈//进行malloc操作时,从开头(下标0后)取空间//进行free操作时,被free的数放到开头(下标0后)#define MAXN 10struct 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;}


0 0