如何在队列中查找特定元素?

时间:2014-10-17 04:52:02

标签: c++ position find queue

我是c ++中的新手,现在我正在尝试在队列中找到一个特定的数字,但它不起作用,我收到了这个错误:

  • 第34行无法在初始化时将“node”转换为“node *”。
  • 第71行无法将'q'从'node *'转换为'node'。

我正在做的是:

#include <iostream>
using namespace std;

typedef struct node {
        int data;
        node * next;
        }queue;
        queue *Q, *first, *final=NULL;


void push()
{
     int number;    
     cout<<"Enter the number: ";
     cin>>number;
     Q=new node; 
     Q->data=number;
     Q->next=NULL;
     if(first==NULL)
     {
        final=first=Q;
     }
     else
     {
         final->next = Q;
         final = Q;    

     }
}

void findElement(node q ,int number)
{

     node * Q=q;
     int i=0,flag=0;

     while(Q!=NULL)
     {
        if(Q->data==number)
        {
           cout<<"Found in position: "<<i<<endl;
           flag=1;
        }
        Q=Q->next;
        i++;
     }
     if(flag==0)
     {
        cout<<"\n\nNot found..."<<endl;
     }
}

int main()
{
    int number,x;
    node *q=NULL;

    cout<<"1 Push"<<endl;
    cout<<"2 Find"<<endl;
    cin>>x;
    do
    {  
        switch (x)
        {
        case 1:
            push();
            break;
        case 2:
            cout<<"\n\nEnter the number you want to find: ";
            cin>>number;
            findElement(q,number);
            break;
        default:
            cout<<"Invalid option..."<<endl;
            break;

        }
    }while (x!=0); 
}

我知道我的节目可能真的很糟糕,但我正在努力学习,所以如果你能告诉我我做错了什么,那对我来说意义重大。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可能涉及其他问题,但对于这些特定错误,您尝试将节点复制到节点*。后者是一个指针。

//This won't work.
node * Q=q;

// This will.  (However...)
node* Q = &q;

同样,在第71行

findElement( q, number);

q类型为node *(指向节点的指针),但findElement采用类型节点。也许你应该改变     findElement(node q,int number) 至     findElement(node * q,int number)

指针可能需要一段时间来包裹你的头,语法是微妙的。然而,它们是该语言的关键点 http://www.cplusplus.com/doc/tutorial/pointers/ http://www.tutorialspoint.com/cplusplus/cpp_pointers.htm