zoukankan      html  css  js  c++  java
  • #链表 链表的两个写法

    写法一

    struct Node{
    	int value;
    	int prev,next;
    }node[size];
    int head,tail,tot;
    
    int init(){//建立一个新的链表 
    	tot=2;//数组模拟要有长度 
    	head=1,tail=2;//头,尾; 
    	node[head].next=tail;
    	node[tail].prev=head;
    }
    void insert(int p,int val){//p后插入q 
    	q=++tot;//定义q
    	node[q].value=val;
    	node[node[p].next].prev=q;/*先把p后面的那个数的头指针指向q
    						(要先把p.next的连接搞定,而p.next是p的尾指针,
    						因此先把与p没关系的p.next.prev建好连接)*/ 
    	node[q].next=node[p].next;/*然后把q的尾指针指向p后面的那个数
    					(第二部就将p.next的头指针建立好连接,这样p.next就搞定了)*/
    	node[p].next=q;//第三步把p的尾指针指向q 
    	node[q].prev=p;//最后一步把q的头指针指向p(第三第四步顺序随意,一个意思) 
    }
    void remove(int p){
    	node[node[p].prev].next=node[p].next;//将p的前一个指针的尾指针指向p的尾指针;
    	node[node[p].next].prev=node[p].prev;//将p的尾指针的头指针指向p的头指针; 
    }
    void clear(){
    	memset(node,0,sizeof(node));
    	head=tail=tot=0;
    }
    

    写法二

    struct node{
    	int value;//数据
    	node *prev,*next;//这里用的是指针; 
    }; 
    node *head,*tail;
    void init(){//新建链表 
    	head=new node();//定义结构;
    	tail=new node();
    	head->next=tail;
    	tail->prev=head; 
    }
    void insert(node *p,int val){//在p之后插入q 
    	q=new node();
    	q->value=val;
    	p->next->prev=q;
    	q->next=p->next;
    	q->prev=p;
    	p->next=q;
    }
    void remove(node *p){//链表中删除p 
    	p->prev->next=p->next;
    	p->next->prev=p->prev;
    	delete p;//销毁指针p 
    }
    void recycle(){//刷新链表 
    	while(head!=tail){//头等于尾,说明中间没东西了 
    		head=head->next;//头不断往后走, (翻滚) 
    		delete head->prev;//然后毁了原指针 (原地留炸弹,BOOM!) 
    	}
    }
    
  • 相关阅读:
    集成方法-概念理解
    k-近邻算法-手写识别系统
    k-近邻算法-优化约会网站的配对效果
    支持向量机-手写识别问题
    支持向量机-在复杂数据上应用核函数
    支持向量机-完整Platt-SMO算法加速优化
    支持向量机-SMO算法简化版
    支持向量机-引入及原理
    hdu4123-Bob’s Race(树形dp+rmq+尺取)
    hdu4436-str2int(后缀数组 or 后缀自动机)
  • 原文地址:https://www.cnblogs.com/yuanyulin/p/14026794.html
Copyright © 2011-2022 走看看