双链表的建立、求长、定位、插入、删除、输出和释放
生活随笔
收集整理的這篇文章主要介紹了
双链表的建立、求长、定位、插入、删除、输出和释放
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<span style="font-size:18px;">#include<iostream>
using namespace std;
typedef struct node
{int data;struct node *next, *prior;
}Node,*Dlist;//創建爽鏈表,循環的,呈現環狀
Dlist creatDlist()
{int num;Node *head, *p1, *p2;head = new Node;p1 = p2 = head->prior = head->next=head;cin >> num;while (-1 != num){//新建結點,用于存儲新輸入的數值p1 = new Node;p1->data = num;//設置一個p2用于存儲新輸入數據的上一個結點,這樣連接起來p2->next = p1;p1->next = head;p1->prior = p2;head->prior = p1;p2 = p1;//這次改變p2的地址,令他為新插入結點的地址,這樣下一次循環中使用cin >> num;}//返回建立鏈表的表頭地址return head;
}//這次獲取霜鏈表的長度信息
int getDlistlength(Dlist p) //輸入鏈表的首地址,進行查找鏈表的長度
{int length = 0;Node* head = p; //將表頭的地址存儲起來,建立一個鏈表的起點while (head != p->next)//循環條件,如果結點的next不是指向頭結點,表示沒有到鏈表的尾部{p = p->next;length++;}return length;
}
//查看某一個位置的表頭地址
Node* getDlistloaction(Dlist p, int 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 = getDlistloaction(p, location - 1);Node* s = new Node;s->data = element;s->next = q->next;s->prior = q;q->next->prior = s;q->next = s; //使新插入的節點和該位置結點的前后連接起來
}//刪除某一個位置的節點
void delnode(Dlist p, int location)
{Node* q = getDlistloaction(p, location);q->prior->next = q->next;q->next->prior = q->prior;delete q;
}//打印鏈表中的數據
void printDlist(Dlist p)
{Node* head = p;while (p->next != head){cout << p->data << endl;p = p->next;}
}//釋放鏈表的存儲空間 ,運用遞歸的方法進行刪除空間,
void release(Dlist p)
{Node* head = p;if (head == p->next) //這是到鏈表尾部的狀況,,就是遞歸棧的底部,,{delete p;}else{release(p->next); //用遞歸方法,遞歸到鏈表的尾部,像是建立一個棧,從棧低進行刪除結點的空間,delete p;}
}int main()
{Dlist head = creatDlist();printDlist(head);//輸入鏈表的首地址就行了int location = 3;int element = 30;insertnode(head, location, element);printDlist(head);location = 2;delnode(head, location);printDlist(head);cout << getDlistlength(head) << endl;/*release(head)*/;system("pause");return 0;
}</span>
總結
以上是生活随笔為你收集整理的双链表的建立、求长、定位、插入、删除、输出和释放的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 单链表的建立,插入和释放
- 下一篇: 链栈的建立、判空、入栈、出栈、求长、访顶