2017-12-01 19 views
-3

下のコードでドットプロダクトの計算式をリンクリストの実装に実装しようとしていますが、以下のエラーが発生しています: 'B'のメンバー 'add_node'これはポインタ型の 'linked_list {aka node *}'です(おそらく、 ' - >'を使うことを意図していましたか?) どうすればよいでしょうか?私もクラスを使用したくないです。ドットプロダクト計算リンクリストの実装

#include <iostream> 
#include <stdlib.h> 
using namespace std; 

struct node 
{ 
    int data; 
    int index; 
    node *next; 
}; 
typedef node* linked_list; 

node *head = NULL; 
node *tail = NULL; 

void add_node(int i,int n) 
{ 
    node *tmp = new node; 
    tmp->index = i; 
    tmp->data = n; 
    tmp->next = NULL; 
    if(head == NULL) 
    { 
     head = tmp; 
     tail = tmp; 
    } 
    else 
    { 
     tail->next = tmp; 
     tail = tail->next; 
    } 
} 
void display(node *head) 
{ 
    while(head!=0) 
    { 
     cout << head->index <<" ," << head->data << endl; 
     display(head->next); 
     break; 
    } 
} 
int main() 
{ 
    linked_list A; 

    A.add_node(2,7); 
    A.add_node(4,5); 
    A.add_node(7,8); 
    A.add_node(9,4); 

    linked_list B; 

    B.add_node(3,5); 
    B.add_node(4,6); 
    B.add_node(9,5); 

    int product=0; 

while(A!=0 && B!=0) 
{ 
    if(A->index == B->index) 
    { 
     product = product + A->data * B->data; 
     A=A->next; 
     B=B->next; 
    } 
    else if(A->index < B->index) 
    { 
     A=A->next; 
    } 
    else 
    { 
     B=B->next; 
    } 
} 
return product; 
    return 0; 
} 
+0

あなた 'node'構造体には、メンバ関数を持っていません。一般的に、ポインタ付きのtypedefを使用すると、悲しいことが起こります。 –

+1

私は、これらの教師は、ここで一日に20回来る「リンクされたリストの割り当て」の質問を偽装する斬新な方法を考え出すことができます。リンクされたリストを使って内積を計算するか?次は何ですか? – PaulMcKenzie

+0

1つのグローバル 'head'と' tail'に2つの異なるリンクリストを実行しようとしています。これは動作しません。私はあなたが2つを分割するリンクリストクラスを作成したいと思います。 – user4581301

答えて

0
#include <iostream> 
using namespace std; 

struct node 
{ 
    int data; 
    int index; 
    node *next; 
}; 
class linked_list 
{ 
private: 
    node *head,*tail; 
public: 
    linked_list() 
    { 
     head = NULL; 
     tail = NULL; 
    } 
    void add_node(int i,int n) 
    { 
     node *tmp = new node; 
     tmp->index = i; 
     tmp->data = n; 
     tmp->next = NULL; 

     if(head == NULL) 
     { 
      head = tmp; 
      tail = tmp; 
     } 
     else 
     { 
      tail->next = tmp; 
      tail = tail->next; 
     } 
    } 
    node* gethead() 
    { 
     return head; 
    } 
}; 
    void display(node *head) 
    { 
     while(head!=0) 
     { 
      cout << head->index <<" ," << head->data << endl; 
      display(head->next); 
      break; 
     } 
    } 
int main() 
{ 
    linked_list A; 

    A.add_node(2,7); 
    A.add_node(4,5); 
    A.add_node(7,8); 
    A.add_node(9,4); 

    linked_list B; 

    B.add_node(3,5); 
    B.add_node(4,6); 
    B.add_node(9,5); 

    display(A.gethead()); 
    display(B.gethead()); 

    int product=0; 


    node *current_a = A.gethead(); 
    node *current_b = B.gethead(); 

    while(current_a != 0 && current_b!=0) 
    { 
     if(current_a->index == current_b->index) 
     { 
      product = product + current_a->data * current_b->data; 
      current_a=current_a->next; 
      current_b=current_b->next; 
     } 
     else if(current_a->index < current_b->index) 
     { 
      current_a=current_a->next; 
     } 
     else 
     { 
      current_b=current_b->next; 
     } 
    } 
    cout<<"\nDot Product : "<< product<<endl; 

    return 0; 
} 

    enter code here 
0

エラーはあなたが知る必要があることを教えてくれます。 linked_listはポインタです。ドット演算子ではなく->演算子を使用する必要があります。

また、あなたのnode構造体はadd_node()と呼ばれるメソッドが含まれていません。実際、それは全くメソッドを含んでいません。

+2

'add_node'はメンバ関数ではありません。エラーは正しいです、あなたが必要です - >逆参照するには、一度あなたは新しいエラーが発生します。 –

+0

ああ、そうだよ。私は答えに追加します。 –

関連する問題