2013-07-12 122 views
-1

這是我班的節點和鏈接列表雙循環鏈接列表實現

#include <iostream> 
#include <string> 
#include <iomanip> 
#include <stdio.h> 

using namespace std; 
//template <class Object> 


//template <class Object> 
class Node 
{ 
    //friend ostream& operator<<(ostream& os, const Node&c); 
public: 
    Node(int d=0); 
    void print(){ 
     cout<<this->data<<endl; 
    } 
//private: 
    Node* next; 
    Node* prev; 
    int data; 

    friend class LinkList; 
}; 
Node::Node(int d):data(d) 
{ 

} 

//template <class Object> 
class LinkList 
{ 
public: 
    //LinkList(); 
    LinkList():head(NULL),tail(NULL),current(NULL){} 
    int base; 
    //LinkList(const LinkList & rhs, const LinkList & lhs); 
    ~LinkList(){delete head,tail,current;} 

    const Node& front() const;//element at current 
    const Node& back() const;//element following current 
    void move(); 
    void insert (const Node & a);//add after current 
    void remove (const Node &a); 
    void create(); 
    void print(); 
private: 
    Node* current;//current 
    Node* head; 
    Node* tail; 


}; 

void LinkList::print() 
{ 
    Node *nodePt =head; 
    while(nodePt) 
    { 
     cout<<"print function"<<endl; 
     cout<<nodePt->data<<endl; 
     nodePt=nodePt->next; 
    } 
} 
//element at current 

void LinkList::create() 
{ 
    Node start(0); 

} 

const Node& LinkList::back()const 
{ 
    return *current; 
} 
//element after current 
const Node& LinkList::front() const 
{ 
    return *current ->next; 
} 

void LinkList::move() 
{ 
    current = current ->next; 
} 
//insert after current 
void LinkList :: insert(const Node& a) 
{ 
    Node* newNode= new Node(); 
    newNode->prev=current; 
    newNode->next=current->next; 
    newNode->prev->next=newNode; 
    newNode->next->prev=newNode; 
    current=newNode; 

} 
void LinkList::remove(const Node& a) 
{ 
    Node* oldNode; 
    oldNode=current; 
    oldNode->prev->next=oldNode->next; 
    oldNode->next->prev=oldNode->prev; 
    delete oldNode; 

} 


#include <iostream> 
#include <string> 
#include <iomanip> 
#include <stdio.h> 
#include "LinkedList.h" 

using namespace std; 


int main() 
{ 
    int n; 
    cout<<"How many Nodes would you like to create"<<endl; 
    cin>>n; 
    Node a(n); 
    Node b(n+1); 
    a.print(); 
    a.next=&b; 


    LinkList list1 ; 
    list1.create(); 

    list1.print(); 
    list1.insert(0); 
    list1.print(); 

    //for(int i=0 ;i<n;i++) 
    //{ 
     //list1.insert(i); 
    //} 

我假設是建立一個雙向循環鏈表,但我現在有問題產生實際的鏈接列表。這是類的問題。此外,對於賦值列表假設是一個模板類,但現在我只想讓代碼工作。我不知道如何正確地創建鏈接列表。

+3

你有什麼問題? – 0x499602D2

+0

除了需要有人完成作業外,沒有任何問題的描述。你的一些方法甚至沒有意義,你是否從其他地方複製它?除了說「打開關於數據結構和/或C++的教科書」之外,我認爲我們確實沒有什麼幫助。 – DanielKO

回答

1

1 - 您必須縮進您的代碼,在發佈之前將其清理乾淨!

2 - 具體在你的問題,我沒有得到你的問題

反正我看到的代碼都和我已經注意到很多事情,可能是他們不都是你的問題

1 - 創建函數是做什麼的?根據你的邏輯,我發現它什麼都不做,按照我的猜測 - 你應該通過使用參數來初始化你的頭部,尾部和當前的電流,或者如果它什麼都不做,就忽略這個函數,然後處理插入的情況在你插入功能的開端,這裏是你的第二個問題

2 - 你插入功能應採取的一些條件照顧,在起始處插入,並在列表

結束,例如,如果刀片上最終,這一說法「newNode->下一步 - >上一個」不會是有效的原因你的下一個現在是空

不要忘記保持你的頭和尾更新處理這些條件之後,小號

而且你爲什麼更新的插入功能的終止電流?儘管你可以避免它的問題,但我不認爲它在邏輯上被接受了,最好是讓「插入」的角色插入,特別是當你有移動功能時

3 - 處理上述

4我提到的刪除功能的相同條件 - 在主要功能: 什麼是那些線!?

Node a(n); 
Node b(n+1); 
a.print(); 
a.next=&b; 

我不知道,如果他們只是在檢測線的節點類,如果不是你應該注意到,這是不符合邏輯可言的鏈接列表的大小來創建一個節點,我真的不知道這樣做的原因!

請務必小心,如果你有節點和鏈接列表之間的任何衝突!

修改所有代碼的一次照顧你可能面臨的條件照顧。

希望我幫忙