• #链表 链表的两个写法


    写法一

    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!) 
    	}
    }
    
  • 相关阅读:
    King's Quest
    Prince and Princess
    Strongly connected
    线性渐变--linear-gradient
    镜像渐变-radio-gradient
    宽度自适应-左右
    宽度自适应-左中右
    HTML5 视频规范简介
    SVG格式
    Html5新标签解释及用法
  • 原文地址:https://www.cnblogs.com/yuanyulin/p/14026794.html
Copyright © 2020-2023  润新知