“双向链表的一些基本操作”
生活随笔
收集整理的這篇文章主要介紹了
“双向链表的一些基本操作”
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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;}
}
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的“双向链表的一些基本操作”的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SDUT_2122 数据结构实验之链表七
- 下一篇: 第三周项目4顺序表应用2 删除元素在[x