• 链表的游标实现


    //对于不支持指针的语言,链表可以用游标来表示
    //
    链表的游标实现 //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! "); 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! "); 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; }
  • 相关阅读:
    Git的分支的clone、提交及删除
    Linux查找整个目录下包含关键词的文件并全局替换文件内容
    解决Mysql group_concat长度限制
    SQLSERVER建立MYSQL连接服务器
    批处理创建文件夹
    表分区常用脚本
    添加别名的重要性
    floor相关
    T-SQL 小数点转换百分数
    开启MSDTC
  • 原文地址:https://www.cnblogs.com/xiong63/p/7243769.html
Copyright © 2020-2023  润新知