日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

双链表的创建,求长,插入,删除,打印,释放(循环和非循环)

發布時間:2025/6/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 双链表的创建,求长,插入,删除,打印,释放(循环和非循环) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
鏈接地址:http://blog.csdn.net/stpeace/article/details/8112462 #include<iostream>using namespace std;typedef struct Node {int data;struct Node *prior; struct Node *next; }Node,*DList;//DList用來指向一個鏈表,Node *定義的函數用來返回其中一個節點的地址DList createDList1()//輸入數據創建循環鏈表 {int num;Node *head,*p1,*p2;//p1指向新創建的節點,p2指向新創建之前的一個節點head=new head;p1=p2=head->prior=head->next=head;cin>>num;while(0!=num){p1=new Node;p1->data=num;p2->next=p1;//不能是head->nextp1->next=head;p1->prior=p2;head->prior=p1;p2=p1;//不可少cin>>num;}return head; }void createDList(Node *&L,int a[],int n)//創建雙鏈表(利用數組) {Node *s,*r;int i;L=new Node;L->next=NULL;r=L;for(i=0;i<n;i++){s=new Node;s->data=a[i];r->next=s;//在此之前,r代表第一個節點(頭結點),s為第二個節點s->prior=r;//prior指向它前一個r=s;}r->next=NULL; }DList searchNode(Node *C,int x)//查找指定的數據,返回節點 {Node *p=C->next;//C為頭結點,里面沒有數據while(p!=NULL){if(p->data==x){break;//結束整個循環,continue結束單個循環,if中的條件成立后,將不執行p=p->next,是continue則會執行}p=p->next;}return p; }int getDListLength(DList p)//循環雙鏈表求長(和雙鏈表求長不一樣),不帶頭結點 {int length=0;Node *head=p//普通雙鏈表不需要這樣定義while(head!=p->next)//普通雙鏈表的判斷條件是NULL!=p->next{length++;p=p->next;}return length; }Node *getlocation(DList p,int location)//循環雙鏈表的定位,找到某一個位置返回其指針 {//為了程序的健壯,這里還要對location進行判斷Node *head=p;int i;for(i=0;head!=p->next&&i<location;i++){p=p->next;}return p; }void insertNode(DList p,int location,int element)//循環鏈表的插入,插在指定位置的后面 {Node *q=getlocation(p,location);Node *s=new Node;//新建一個節點插入s->data=element;s->prior=q;s->next=q->next;q->next->prior=s;//q->next表示之前q之前的后一個節點,這段代碼表示q之前的后一個節點的prior指向q->next=s; }void delNode(DList p,int location) {Node *q=getlocation(p,location);//刪除這個qq->prior->next=q->next;//q->next表示q之前的那個節點q->next->prior=q->prior;//q->next表示q之后的那個節點delete p; }void release(DList p)//釋放循環雙鏈表 {Node *head=p;if(head==p->next)delete p; else{release(p->next);delete p;} }void print(DList p)//打印環狀 {Node *head=p;//指針初始化,此時head表示頭結點的地址while(head!=p->next)//循環的,最后又指向頭結點{cout<<p->next->data<<endl;p=p->next;} }void print1(DList p)//打印非循環雙鏈表 {while(NULL!=p->next){cout<<p->next->data<<endl;p=p->next;} }int main() {DList head,head1;int a[5]={1,2,3,4,5};createDList(head,a,5);print1(head);DList head2=createDList();print(head2);int location=2;int element=5;insertNode(head2,location,element);print(head2);int location1=2;delNode(head2,location);print(head2);release(head2);}

?

總結

以上是生活随笔為你收集整理的双链表的创建,求长,插入,删除,打印,释放(循环和非循环)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。