2012-11-28 59 views
-1

從文本文件中將整數讀入一個簡單的鏈接列表。然後使整數列表冒泡並讀出到另一個文件。現在我正在閱讀主內容,但我試圖讓提取操作符超載來讀取它,我不知道如何去做。我的Bubblesort函數也引起了很多問題。它告訴我函數不能被重載,節點標識符是未聲明的。任何幫助將不勝感激從文本文件中將整數讀入一個簡單的鏈接列表。然後冒泡整數列表並讀出到另一個文件

主文件

#include <iostream> 
#include <cstdlib> 
#include <iomanip> 
#include <fstream> 
#include "bubble.h" 

using namespace std; 
struct nodeType 
{ 
    int info; 
    nodeType* link; 
}; 

node *head_ptr = NULL; 
void Display(); 
void list_clear(nodeType*& head_ptr); 
void list_copy(const nodeType* source_ptr, nodeType*&head_ptr, nodeType*&tail_ptr); 
Bubblesort(); 


int main() 
{ 
    ifstream datld; 
    ofstream outld; 

    Bubble D3; 

    datld.open ("infile2.txt"); 
    if (!datld) 
    { 
     cout << "failure to open data.txt" << endl; 
     system ("pause"); 
     return 1; 
    } 

    datld >> D3; 

    while(datld) 
    { 
     cout << D3<< endl; 
     datld >> D3; 
    } 

    system("pause"); 
    return 0; 

    Bubblesort(); 
} 


void Bubblesort() 
{ 
    node* curr = head_ptr; 
    int count = 0; 
    while(curr!=NULL) 
    { 
     count++; 
     curr = curr->NEXT; 
    } 
    for(int i = count ; i > 1 ; i--) 
    { 
     node *temp, *swap1; 
     swap1 = HEAD; 
     for(int j = 0 ; j < count-1 ; j++) 
     { 
      if(swap1->DATA > swap1->NEXT->DATA) 
      { 
       node *swap2 = swap1->NEXT; 
       swap1->NEXT = swap2->NEXT; 
       swap2->NEXT = swap1; 
       if(swap1 == HEAD) 
       { 
        HEAD = swap2; 
        swap1 = swap2; 
       } 
       else 
       { 
        swap1 = swap2; 
        temp->NEXT = swap2; 
       } 
      } 
      temp = swap1; 
      swap1 = swap1->NEXT; 
     } 
    } 
} 


void list_clear(nodeType*& head_ptr) 
//Library facilities used:cstdlib 
{ 
    nodeType * removeptr; 
    while(head_ptr!=NULL) 
    { 
     removeptr=head_ptr; 
     head_ptr=head_ptr->link; 
     delete removeptr; 
    } 
} 

void list_copy(const nodeType* source_ptr, nodeType*&head_ptr, nodeType*&tail_ptr) 
{ 
    nodeType* temp;// to allocate new nodes 
    head_ptr=NULL; 
    tail_ptr=NULL; 

    if(source_ptr==NULL) 
     return; 

    head_ptr=new nodeType; 
    head_ptr->link=NULL; 
    head_ptr->info=source_ptr->info; 
    tail_ptr=head_ptr; 
    source_ptr=source_ptr->link; 

    while(source_ptr!=NULL) 
    { 
     temp = new nodeType; 
     temp->link=NULL; 
     temp->info =source_ptr-> info; 
     tail_ptr->link=temp; 
     tail_ptr = tail_ptr->link; 
     source_ptr = source_ptr->link; 
    } 
} 

頭文件

#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <cstdlib> 
using namespace std; 

class Bubble 
{ 
private: 
    int manynodes; 
public: 
    Bubble() { } 

    void Bubblesort(); 

    friend ostream &operator<<(ostream &output, const Bubble &D) 
    { 
     output << D.manynodes; 
     return output; 
    } 

    friend istream &operator>>(istream &input, Bubble &D) 
    { 
     input >> D.manynodes; 
     return input; 
    } 
}; 

回答

0
  • 你的提取操作看起來不錯。我不知道它是否真的滿足你的需求,但這是另一個問題。
  • 您聲明功能Bubblesort()兩次:先在頭文件作爲void Bubblesort(),然後在主文件只是Bubblesort()(至少應該給你一個警告,它被認爲是指int Bubblesort())。你不能僅僅在返回值上重載一個函數,因此錯誤。
  • 事實上,你在幾個地方使用一種叫做node的類型,但是你還沒有聲明,也沒有在任何地方定義它。
相關問題