“双向链表的一些基本操作”

来源:互联网 发布:侵犯网络隐私权的案例 编辑:程序博客网 时间:2024/09/21 09:22
void CreateLink()//头插法建立双向链表节点(逆序存储){node *L,*s;L=new node;L->prior=L->next=NULL;for(int i=0;i<n;i++){s=new node;s->num=a[i];s->next=L->next;//1先与下一个节点建立联系if(L->next!=NULL)L->next->prior=s;//说明L下面还有节点,可以插入下面的那个节点前面L->next=s;//2上一个节点在与它建立联系s->prior=L;}//最后L是个空节点}void CreteList()//尾插法建立双向链表(正序){node *L,*s,r;L=new node;L->next=L->prior=NULL;r=L;for(int i=0;i<n;i++){s=new node;s->num=a[i];r->next=s;s->prior=r;r=s;}s->next=NULL;}//基本运算,在n之前插入一节点插入数据元素(思路:先找到此时n之前的节点m,然后插入到m之后)(换个思路也可以用于插入到节点m之后)bool ListInsert(noed *L,int i,ElemType e){int j=1;//在矛个位置,要插入的位置,找到要插入的位置之前的元素node *p=L,*s;while(j<i&&p!=NULL){j++;p=p->text;}if(p==NULL)return false;else{s=new node;s->num=e;s->next=p->next;p->next->prior=s;p->next=s;s->prior=p;return true;}}//在双链表中删除某一个节点i(p之后的一个节点)(思路:要找到p这个节点,进行删除)bool ListDeletd(node*L,int i,int e){int j=1;node *p=L,*q;while(j<i&&p!=NULL){p=p->next;j++;}if(p==NULL)return false;else{q=p->next;/*if(q=NULL)return false;else*/e=q->num;//删除的节点的那个值,(具体分析)p->next=q->next;//借用q(用p->next=p->next->next?)q->next->prior=p;//p->next->prior=p;这句话不对,之前p->next值已经改变了delete q;//q一定是要出现的,因为最后要删除这个节点return true;}}

原创粉丝点击