亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

如何用C++實現雙向循環鏈表

2020-01-26 16:03:16
字體:
來源:轉載
供稿:網友
雙向循環鏈表,即每個節點都擁有一前一后兩個指針且頭尾互鏈的鏈表。各種鏈表的簡單區別如下:
單向鏈表:基本鏈表;
單向循環鏈表:不同于單向鏈表以 NULL 判斷鏈表的尾部,單向循環鏈表的尾部鏈接到表頭,因此當迭代操作到表頭前即是尾部;
雙向鏈表:比單向鏈表多出指向前一個節點的指針,但實際上使用雙向鏈表時很少使用不循環的;
雙向循環鏈表:相對于單向循環鏈表,雙向循環鏈表可從頭部反向迭代,這在鏈表長度很大且需要獲取、插入或刪除靠近鏈表尾部元素的時候十分高效。單向循環列表只能從表頭正向迭代,執行的時間大于從反向迭代。
node.h
復制代碼 代碼如下:

/*
* 節點類型。三個成員分別是:指向前一個節點的指針,元素本身,指向后一個節點的指針。
*/
class Node {
public:
    int element;
    Node *next;
    Node *previous;
    Node(int element, Node *next, Node *previous) {
        this->element = element;
        this->next = next;
        this->previous = previous;
    }
};
linkedlist.h:
#include "node.h“
struct LinkedList {
    LinkedList();
    void addFirst(int);
    void addLast(int);
    void add(int index, int element);
    int getFirst();
    int getLast();
    int get(int);
    int removeFirst();
    int removeLast();
    int remove(int);
    void iterate();
private:
    Node *header;
    int size;
};
linkedlist.cpp:
#include "linkedlist.h"
#include <iostream>
using std::cout;
/*
* 構造方法。
* 生成一個空的節點介于表頭和表尾之間,初始前后指針都指向自己。
*/
LinkedList::LinkedList() {
    header = new Node(NULL, NULL, NULL);
    header->next = header;
    header->previous = header;
    size = 0;
}
/*
* 在鏈表頭部添加一個元素。
* 生成一個新的節點,向前指向空節點,向后指向原來空節點的下一個節點,即原來的第一個節點。
* 空節點向后指向此節點,原來的第一個節點向前指向此節點。
*/
void LinkedList::addFirst(int i) {
    header->next = new Node(i, header->next, header);
    header->next->next->previous = header->next;
    ++size;
}
/*
* 在鏈表最后添加一個元素。
* 生成一個新的節點,向前指向原來空節點的前一個節點,即原來的最后一個節點,向后指向空節點。
* 原來的最后一個節點向后指向此節點,空節點向前指向此節點。
*/
void LinkedList::addLast(int i) {
    header->previous = new Node(i, header, header->previous);
    header->previous->previous->next = header->previous;
    ++size;
}
/*
* 在指定的索引前插入一個元素。0 <= 索引 <= 鏈表長度。
* 如果索引值小于鏈表長度的一半,向后(正向)迭代獲取索引值位置的節點,反之則向前(反向)。
* 生成一個新的節點,向前指向原來這個位置的節點的前一個節點,向后指向原來這個位置的節點。
* 原來這個位置的節點的前一個節點向后指向此節點,原來這個位置的節點向前指向此節點。
* (在指定的索引刪除一個元素實現方法類似)
*/
void LinkedList::add(int index, int i) {
    if(index > size || index < 0) {
        cout << "Exception in add(): Index out of bound." << '/n';
    return;
    }
    Node *entry;
    if(index < size / 2) {
        entry = header->next;
        for(int i = 0; i < index; ++i)
            entry = entry->next;
    }
    else {
        entry = header;
        for(int i = size; i > index; --i)
            entry = entry->previous;
    }
    entry->previous->next = new Node(i, entry, entry->previous);
    entry->previous = entry->previous->next;
    ++size;
}
/*
* 獲取鏈表第一個元素。
* 空節點向后指向的節點即是第一個元素。
*/
int LinkedList::getFirst() {
    if(!size)
        cout << "Exception in getFirst(): List is empty." << '/n';
    return header->next->element;
}
/*
* 獲取鏈表最后一個元素。
* 空節點向前指向的節點即是最后一個元素。
*/
int LinkedList::getLast() {
    if(!size)
        cout << "Exception in getLast(): List is empty." << '/n';
    return header->previous->element;
}
/*
* 刪除并返回鏈表第一個元素。
* 鏈表第二個節點向前指向空節點,空節點向后指向第二個節點。
*/
int LinkedList::removeFirst() {
    int remove = header->next->element;
    header->next->next->previous = header;
    header->next = header->next->next;
    --size;
    return remove;
}
/*
* 刪除并返回鏈表最后一個元素。
* 鏈表倒數第二個節點向后指向空節點,空節點向前指向倒數第二個節點。
*/
int LinkedList::removeLast() {
    int remove = header->previous->element;
    header->previous->previous->next = header;
    header->previous = header->previous->previous;
    --size;
    return remove;
}
/*
* 用來輸出所有元素的迭代方法。
*/
void LinkedList::iterate() {
    if(!size) {
        cout << "Exception in iterate(): List is empty." << '/n';
        return;
    }
    for(Node *entry = header->next; entry != header; entry = entry->next)
        cout << entry->element << " ";
    cout << '/n';
}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕不卡在线视频极品| 国产精品视频网站| 亚洲一区二区三区乱码aⅴ| 国产精品丝袜一区二区三区| 91在线免费网站| 亚洲free性xxxx护士hd| 中文字幕久精品免费视频| 久久天天躁狠狠躁老女人| 国产精品电影久久久久电影网| 亚洲老板91色精品久久| 中文字幕日韩精品有码视频| 国产精品免费久久久久影院| 亚洲一区二区三区成人在线视频精品| 亚洲国产高清福利视频| 热99精品里视频精品| 美女福利视频一区| 国产欧美一区二区| 免费99精品国产自在在线| 久久久久久久亚洲精品| 亚洲精品久久久久中文字幕二区| 亚洲高清福利视频| 狠狠干狠狠久久| 国产精品久久久久久久久久免费| 日韩电影在线观看永久视频免费网站| 亚洲午夜精品久久久久久久久久久久| 4444欧美成人kkkk| 国产精品美乳在线观看| 久久免费视频网站| 亚洲日本中文字幕免费在线不卡| 91chinesevideo永久地址| 精品久久国产精品| 国产欧美精品在线| 国产一区香蕉久久| 日韩欧美亚洲成人| 亚洲淫片在线视频| 亚洲精品成人网| 2019国产精品自在线拍国产不卡| 亚洲香蕉伊综合在人在线视看| 成人网址在线观看| 亚洲天堂一区二区三区| 亚洲国产欧美一区二区三区久久| 中文字幕精品—区二区| 欧美激情一区二区久久久| 久久99亚洲热视| 亚洲精品成人网| 久久人91精品久久久久久不卡| 国产精品xxxxx| 亚洲国产毛片完整版| 欧美性猛交xxx| 亚洲人成免费电影| 久久福利视频网| 国语自产偷拍精品视频偷| 91社区国产高清| 91香蕉亚洲精品| 啪一啪鲁一鲁2019在线视频| 亚洲欧美另类自拍| 在线观看中文字幕亚洲| 色综合久久88色综合天天看泰| 精品女同一区二区三区在线播放| 97久久精品国产| 亚洲乱码av中文一区二区| 亚洲va男人天堂| 51视频国产精品一区二区| 国产精品中文久久久久久久| 亚洲国产91色在线| 中文字幕日韩视频| 91欧美日韩一区| 美日韩精品免费视频| 欧洲美女7788成人免费视频| 久久99亚洲热视| 久久久噜噜噜久久| 亚洲一区亚洲二区亚洲三区| 亚洲色图色老头| 久久精品在线视频| 色天天综合狠狠色| 91久热免费在线视频| 欧美黑人狂野猛交老妇| 欧美亚洲成人免费| 欧美激情a∨在线视频播放| 久久成人免费视频| 国产一区二区三区在线观看视频| 国产精品∨欧美精品v日韩精品| 欧美黑人性视频| 九九热99久久久国产盗摄| 国产在线观看精品| 日韩资源在线观看| 欧美大尺度激情区在线播放| 92国产精品久久久久首页| 国产国产精品人在线视| 国产日韩中文字幕在线| 国产精品久久久久久久久久99| 91在线无精精品一区二区| 欧美一级片免费在线| 久久久久久久久国产| 57pao国产精品一区| 成人免费网视频| 亚洲bt天天射| 在线播放亚洲激情| 91国产高清在线| 亚洲人成电影网站色…| 在线观看中文字幕亚洲| 亚洲国产精品久久久久秋霞蜜臀| 欧美老妇交乱视频| 国产视频精品一区二区三区| 欧美性猛交xxxx| 亚洲午夜av电影| 日韩av电影手机在线观看| 亚洲永久在线观看| 国产精品福利片| 中文字幕久久亚洲| 中文字幕日韩精品有码视频| 国产精品av在线播放| 91精品国产色综合久久不卡98口| 欧美激情视频在线观看| 亚洲电影成人av99爱色| 日韩福利伦理影院免费| 色先锋资源久久综合5566| 亚洲一级一级97网| 国产精品综合久久久| 91高清免费在线观看| 国产不卡av在线| 中文字幕欧美视频在线| 97不卡在线视频| 国产视频久久久久久久| 国产精品久久久久影院日本| 欧美性受xxxx白人性爽| 亚洲国产精品va在线看黑人| 91久久精品国产91性色| 久久久噜噜噜久噜久久| 国产精品69久久久久| 欧美视频精品一区| 欧美插天视频在线播放| 欧美日韩精品二区| 成人av在线亚洲| 欧美激情第三页| 色www亚洲国产张柏芝| 欧美尤物巨大精品爽| 国产日本欧美一区二区三区| 青青久久av北条麻妃黑人| 亚洲第一国产精品| 美女啪啪无遮挡免费久久网站| 欧美成aaa人片免费看| 日韩精品中文字幕在线| 久久精品视频免费播放| 中文字幕在线观看亚洲| 91麻豆桃色免费看| 国产精品免费观看在线| 午夜精品视频在线| 91在线高清视频| 欧美成人免费在线观看| 日韩在线视频观看正片免费网站| 久久天天躁狠狠躁夜夜爽蜜月| 亚洲欧美中文日韩v在线观看| 日韩在线观看免费av| 精品中文字幕在线2019| 91亚洲国产精品| 亚洲最新av在线| 欧美成人亚洲成人日韩成人| 欧美成人亚洲成人| 国产成人精品在线视频| 亚洲天堂男人天堂女人天堂| 91精品久久久久久久久久久久久| 97超级碰在线看视频免费在线看| 国产欧美一区二区三区四区|