zoukankan      html  css  js  c++  java
  • 线性表之静态链表

    #include<iostream>
    #include <iomanip>
    #include"windows.h"
    using namespace std;
    struct StaticLinkNode
    {
        int data;
        int next;
    };
    struct StaticLink
    {
        StaticLinkNode* nodes;
        int maxCnt;
        int cnt;
    };
    StaticLink createStaticLink(int max)
    {
        StaticLink p;
        p.nodes=new StaticLinkNode[max+2];
        for(int i=0;i<max;i++)
            p.nodes[i].next=i+1;
        p.nodes[max].next=0;
        p.nodes[max+1].next=0;
        p.maxCnt=max;
        p.cnt=0;
        return p;
    }
    int getSpare(StaticLink* p)
    {
        int first = (*p).nodes[0].next;
        if(first!=0)
            (*p).nodes[0].next = (*p).nodes[first].next;
        return first;
    }
    void releaseToSpare(StaticLink* p,int i)
    {
        int first = (*p).nodes[0].next;
        (*p).nodes[i].next=first;
        (*p).nodes[0].next=i;
    }
    bool add(StaticLink* p,int i,int value)
    {
        int target =getSpare(p);
        if(target==0)
            return 0;
        int first =(*p).maxCnt+1;
        for(int j=0;j<i-1 && first;j++)
            first = (*p).nodes[first].next;
        if(first!=0)
        {
            (*p).nodes[target].data=value;
            (*p).nodes[target].next = (*p).nodes[first].next;
            (*p).nodes[first].next=target;
            (*p).cnt++;
            return 1;
        }
        return 0;
    }
    bool remove(StaticLink* p,int i)
    {
        int first =(*p).maxCnt+1;
        if(first==0)
            return 0;
        for(int j=0;j<i-1 && (*p).nodes[first].next;j++)
            first = (*p).nodes[first].next;
        if((*p).nodes[first].next)
        {
            int t=(*p).nodes[first].next ;
            (*p).nodes[first].next = (*p).nodes[(*p).nodes[first].next].next;
            releaseToSpare(p,t);
            (*p).cnt--;
            return 1;
        }
        return 0;
    }
    void output(StaticLink* p)
    {
        int first =(*p).nodes[(*p).maxCnt+1].next;
        while(first!=0)
        {
            cout<<(*p).nodes[first].data<<" ";
            first=(*p).nodes[first].next;
        }
        cout<<endl;
    }
    void main()
    {
        int max=28;
        StaticLink p= createStaticLink(28);
        for(int i=0;i<15;i++)
        {
            int x = rand()%100;
            cout<<x<<" ";
            add(&p,p.cnt+1,x);
        }
        cout<<endl;
        output(&p);
    
        add(&p,2,45);
        output(&p);
    
        add(&p,1,55);
        output(&p);
    
        add(&p,p.cnt,65);
        output(&p);
        add(&p,p.cnt+1,75);
        output(&p);
    
        remove(&p,2);
        output(&p);
    
        remove(&p,1);
        output(&p);
    
        remove(&p,p.cnt);
        output(&p);
        remove(&p,p.cnt+1);
        output(&p);
    
        cin>>max;
    }
  • 相关阅读:
    为什么要用全文搜索引擎:全文搜索引擎 VS 数据库管理系统
    大数据学习路线之hive存储格式
    web测试教程之JavaScript中的变量
    Java学习中面向过程与面向对象的优缺点
    Java教程之Java反射
    Python技术基础知识点:OS模块的应用
    软件测试教程——概念解析及常用方法概说
    UI设计师必备技能 网页中的色彩搭配(色彩篇)
    UI技术分享 如何提高自己的设计视野
    JavaScript学习指南分享
  • 原文地址:https://www.cnblogs.com/kbyd/p/3998160.html
Copyright © 2011-2022 走看看