2017-01-26 26 views
-2

2つのリンクされたリストを比較しようとしています。リストとしてパラメータを取り、それらを比較する関数を作成したいと考えています。私は関数を投稿するつもりです。2つのリンクされたリストを関数のパラメータとして使用する

編集:この機能は動作しません。修正は歓迎されます。

#include <cstdio> 
#include <iostream> 
#include <cstdlib> 
using namespace std; 

class queue { 
private: 

    struct node { 
     int data; 
     node* next; 
    }; 

    typedef struct node* nodeptr; 

    nodeptr head; 
    nodeptr curr; 
    nodeptr temp; 

public: // this is where the functions go 
    queue(); 
    bool empty(); 
    void enqueue(int x); 
    void printL(); 
}; 

queue::queue() { 
    head = NULL; 
    curr = NULL; 
    temp = NULL; 
} 

bool queue::empty() { 
    bool check = false; 
    if (head == NULL) check = true; 
    return check; 
} 

void queue::enqueue(int x) { 
    nodeptr n = new node; 
    n->next = NULL; 
    n->data = x; 

    if (head != NULL) { 
     curr = head; 
     while (curr->next != NULL) curr = curr->next; 
     curr->next = n; 
    } 
    else head = n; 
} 

void queue::printL() { 
    curr = head; 
    while (curr->next != NULL) { 
     printf("%d ", curr->data); 
     curr = curr->next; 
    } 
    printf("\n"); 
} 

bool check(*thetikoi, *arnitikoi) { 
    nodeptr a = head.thetikoi; 
    nodeptr b = head.arnitikoi; 
    while (a != NULL && b != NULL) 
     if (thetikoi->data != (arnitikoi->data)) 
      return false; 

    a = a->next; 
    b = b->next; 
    return (a == NULL && b = NULL); 
} 

int main() { 
    queue thetikoi; 
    queue arnitikoi; 
    int r = 0; 
    while (r != EOF) { 
     scanf("%d", &r); 

     if (r >= 0) thetikoi.enqueue(r); 
     else arnitikoi.enqueue(r); 

    } 

    thetikoi.printL(); 
    arnitikoi.printL(); 

    return 0; 
} 
+0

そして、何の問題のようですか? – NathanOliver

+0

それは明らかに動作していない、私は間違ってリストを呼び出すと思う – Maverick98

+2

タイプがありません... – Jarod42

答えて

0

あなたのチェック機能にはいくつかの問題があります。

パラメータリストでは、パラメータのタイプを指定する必要があります。これに bool check(*thetikoi , *arnitikoi)

bool check(queue *thetikoi ,queue *arnitikoi)

ヘッドポインタへのあなたのローカル変数を割り当てる場合、あなたは後方のものがあります。このことから

この:

nodeptr a=head.thetikoi; 
nodeptr b=head.arnitikoi; 

ニーズこれは次のとおりです。

nodeptr a=thetikoi->head; // cannot use '.' when accessing fields with a pointer 
nodeptr b=arnitikoi->head; 

最初にnullptrではない2つのリストにもカウントしています。彼らが良いと確信しているなら、検査はうまくいかない。

whileループは、その範囲内にあるべきステートメントをすべて囲むことができません。

この

while (a !=NULL && b != NULL) 
    if (a->data != (b->data)) 
    return false; 

a=a->next; 
b=b->next; 

は次のようになります。

while (a !=nullptr && b != nullptr) 
    { 
     if (thetikoi->data != (arnitikoi->data)) 
      return false; 

     a=a->next; 
     b=b->next; 
    } 
+0

男これは素晴らしいです、それは多くの役に立つ、それらを実装するrn:D – Maverick98

+0

あなたは言ったが、多くの間違い。とにかく私は自分で修正しようとしましたが、私はこの1つのエラーに来ましたが、私はそれを理解することはできません。 ask18.cpp:メンバ関数 'bool queue :: check(queue *、queue *)': ask18.cpp:67:18:エラー: 'class queue'に 'data'という名前のメンバがありません – Maverick98

+0

@ Maverick98 oops。うん、if文が正しくない。 –

関連する問題