2016-03-22 10 views
-2

Ich machte ein Programm von singly linked list in C++ so von struct innerhalb der Klasse verwenden. Ich weiß, dass typedef mit struct verwendet wird, so dass danach die Erklärung keinen Gebrauch von struct Schlüsselwort erfordern. Aber wenn ich den Code nicht verwenden typedef wird erfolgreich kompiliert auch ohne Verwendung des struct Schlüsselwort in Zukunft Erklärungen, aber wenn ich typedef verwenden Sie es nicht kompiliert. Hier ist der Code:Seltsames Verhalten von typedef in struct

#include <iostream> 
using namespace std; 

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

class single_list{ 
    public: 
     struct node* create_node(int); 
     void insert_begin(); 
     void insert_pos(); 
     void insert_last(); 
     void delete_pos(); 
     void sort(); 
     void display(); 
}; 

int main() 
{ 
    int choice,nodes,element,position,i; 
    single_list sl; 
    node* head = NULL; 
    while(1) 
    { 
     cout<<endl<<"List of operations"<<endl; 
     cout<<"1: Insert node at the beginning"<<endl; 
     cout<<"2: Insert node at a specific position"<<endl; 
     cout<<"3: Insert node at the last"<<endl; 
     cout<<"4: Delete a node at specific position"<<endl; 
     cout<<"5: Sorting the linked list"<<endl; 
     cout<<"6: Display the linked list"<<endl; 
     cout<<"Enter your choice"<<endl; 
     cin>>choice; 

     switch(choice) 
     { 
      case 1: 
       cout<<"Inserting node at the beninning"<<endl; 
       sl.insert_begin(); 
       cout<<endl; 
       break; 

      case 2: 
       cout<<"Inserting node at a specific position"<<endl; 
       sl.insert_pos(); 
       cout<<endl; 
       break; 

      case 3: 
       cout<<"Inserting node at the last place"<<endl; 
       sl.insert_last(); 
       cout<<endl; 
       break; 

      case 4: 
       cout<<"Deleting node at specific position"<<endl; 
       sl.delete_pos(); 
       cout<<endl; 
       break; 

      case 5: 
       cout<<"Sorting the linked list"<<endl; 
       sl.sort(); 
       cout<<endl; 
       break; 

      case 6: 
       cout<<"Displaying the linked list"<<endl; 
       sl.display(); 
       cout<<endl; 
       break; 

      default: 
       cout<<"Wrong Choice"<<endl;      
     } 
    } 
} 

node *single_list::create_node(int data) 
{ 
    node* temp; 
    temp = new node; 
    temp->data = data; 
    temp->next = NULL; 
    return temp; 
} 

void single_list::insert_begin() 
{ 
    cout<<"Enter value to be inserted"<<endl; 
    int data; 
    cin>>data; 
    node* temp; 
    node* p; 
    temp = create_node(data); 

    if (head == NULL) 
    { 
     head = temp; 
     head->next = NULL; 
    } 
    else 
    { 
     p = head; 
     head = temp; 
     head->next = p; 
    } 
} 

void single_list::insert_pos() 
{ 
    cout<<"Enter the position at which you want to enter the number"<<endl; 
    int pos; 
    cin>>pos; 
    cout<<"Enter the data of the node"<<endl; 
    int data; 
    node* t; 
    t = head; 
    node* temp1; 
    temp1->data = data; 
    for(int i=1;i<pos;i++) 
    { 
     t = t->next; 
    } 
    if(pos == 1) 
    { 
     if(head == NULL) 
     { 
      head = temp1; 
      head->next = NULL; 
     } 
     else 
     { 
      temp1->next = t->next; 
      t->next = temp1;  
     } 
    } 
    else 
    { 
     cout<<"Position out of range"<<endl; 
    } 

} 

void single_list::insert_last() 
{ 
    cout<<"Enter the data of the number"<<endl; 
    int data; 
    cin>>data; 
    node* temp1; 
    temp1->data = data; 
    temp1->next = NULL; 
    node* t; 
    t = head; 
    while(t != NULL) 
    { 
     t = t->next; 
    } 
    t->next = temp1; 
} 
+0

Wo verwenden Sie typedef? – niyasc

Antwort

1

Nachdem Sie ein struct

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

Der Name definieren node kann ohne typedef in C++ verwendet werden. Sie müssen an C denken, was eine typedef erfordert.

In C++, es OK ist, zu verwenden:

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

node* head; 

In C, werden Sie verwenden müssen:

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

struct node* head; 

oder

// Define the struct and a typedef in one statement. 
typedef struct node{   
    int data; 
    struct node* next; 
} node; 

node* head; 
+0

Danke. ya Bit mit C und C++ verwirrt, weil mein Stil in C++ Code zu schreiben C mit Klassen – ashish

+0

@ashish ist, Sie sind willkommen. Ich bin froh, dass ich helfen konnte. –

0

Sie brauchen nicht struct Schlüsselwort zu verwenden, wenn die Definition/Deklaration eines Objekts in C++. So ist es in C, nicht in C++.

+0

für einen neuen Knoten definieren, sollten wir ** struct node * n ** nicht verwenden, wenn nicht typedef – ashish

+0

@ashish definieren, können Sie es verwenden, aber man kann es auch weglassen. Es ist nicht erforderlich in C++ – ixSci

0

Der folgende Code erklärt head ein Zeiger auf node variabel zu sein.

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

Jedoch wird die folgende head definieren node ein Alias ​​für den Typ Zeiger zu sein.

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