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

    静态单链表

    算法思想:

    • 数组模拟单链表称为静态链表
    • 存储图 存储树
    • 优点:快(静态链表)因为如果指针实现时要用new()动态开辟,非常慢(注重时间最短)
    • 写工程的时候用动态链表就好了(更注重内存管理)
    • 单链表往往需要存下头节点的值即e[head]

    代码实现:

    const int N=100010;
    //head表示头节点的下标 即head->o->o->o  head表示第一个o的下标,head不是一个节点
    //e[i]节点i的值
    //ne[i]节点i的next指针
    //idx存储当前待安排的点的下标
    int head,e[N],ne[N],idx;
    //初始化
    void init()
    {
        head = -1;
        idx = 0;
    }
    //将x插到头节点
    void add_to_head(int x)
    {
        e[idx] = x, ne[idx] = head, head = idx, idx ++;
    }
    //将x插到下标是k的点的后面
    void add_to_k(int k,int x)
    {
        e[idx] = x, ne[idx] = ne[k], ne[k] = idx, idx ++;
    }
    //将下标是k的后面的点删除
    void remove(int k)
    {
        ne[k] = ne[ne[k]];
    }
    init();
    for(int i=head;i!=-1;i=ne[i])
    {
    	cout<<e[i]<<' ';
    }
    

    静态双链表

    算法思想:

    • 双链表往往不需要寸两端节点的值是多少,所以初始化就有两个节点(首尾)只要用0和1标记就好了,始终不用存值
    const int N=100010;
    int e[N],l[N],r[N],idx;
    void init()
    {
        //0表示左端点 1表示右端点
        r[0] = 1;
        l[1] = 0;
        idx = 2;
    }
    //在k号节点右边插入x    如果想实现在k号的左边插入就调用add_k(l[k],x)
    void add(int k,int x)
    {
        e[idx] = x;
        r[idx] = r[k];
        l[idx] = k;
        l[r[k]] = idx;
        r[k] = idx;
        idx ++;
    }
    //删除k号节点
    void remove(int k)
    {
        l[r[k]] = l[k];
        r[l[k]] = r[k];
    }
    int main()
    {
        init();
        int m;
        cin>>m;
        while(m--)
        {
            string op;
            int k,x;
            cin>>op;
            if(op == "L")   
            {
                cin>>x;
                add(0,x);
            }
            else if(op == "R")
            {
                cin>>x;
                add(l[1],x);
            }
            else if(op == "D")
            {
                cin>>k;
                remove(k+1);
            }
            else if(op == "IL")
            {
                cin>>k>>x;
                add(l[k+1],x);
            }
            else 
            {
                cin>>k>>x;
                add(k+1,x);
            }
        }
        for(int i=r[0]; i!=1;i = r[i])   cout<<e[i]<<' ';
        cout<<endl;
        return 0;
    }
    
  • 相关阅读:
    选项卡
    使用script创建标签添加属性值和添加样式
    判断表单不能为空(表格形式的)
    数组
    关于meta元信息元素
    js判断数据类型
    Ising模型的Metropolis模拟中的组态阻塞和振荡
    python 画能级图
    python 调用 shell 命令,制作用户界面
    打包 python 程序,变成一个可执行文件
  • 原文地址:https://www.cnblogs.com/codertea/p/12803252.html
Copyright © 2011-2022 走看看