2013-02-19 40 views
0

我正在開發一個C程序,它對我來說還不是很熟悉。它可以選擇如何處理鏈表。但它有錯誤。到目前爲止,這就是我所擁有的。如何在C中執行插入,刪除和顯示元素到鏈表中?

#include<stdio.h> 
#include<stdlib.h> 

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



void append(int num) 
{ 
    struct node *temp,*right; 
    temp= (struct node *)malloc(sizeof(struct node)); 
    temp->data=num; 
    right=(struct node *)head; 
    while(right->next != NULL) 
    right=right->next; 
    right->next =temp; 
    right=temp; 
    right->next=NULL; 
} 



void add(int num) 
{ 
    struct node *temp; 
    temp=(struct node *)malloc(sizeof(struct node)); 
    temp->data=num; 
    if (head== NULL) 
    { 
    head=temp; 
    head->next=NULL; 
    } 
    else 
    { 
    temp->next=head; 
    head=temp; 
    } 
} 
void addafter(int num, int loc) 
{ 
    int i; 
    struct node *temp,*left,*right; 
    right=head; 
    for(i=1;i<loc;i++) 
    { 
    left=right; 
    right=right->next; 
    } 
    temp=(struct node *)malloc(sizeof(struct node)); 
    temp->data=num; 
    left->next=temp; 
    left=temp; 
    left->next=right; 
    return; 
} 

int count() 
{ 
    struct node *n; 
    int c=0; 
    n=head; 
    while(n!=NULL) 
    { 
    n=n->next; 
    c++; 
    } 
    return c; 
} 


void insert(int num) 
{ 
    int c=0; 
    struct node *temp; 
    temp=head; 
    if(temp==NULL) 
    { 
    add(num); 
    } 
    else 
    { 
    while(temp!=NULL) 
    { 
     if(temp->data<num) 
     c++; 
     temp=temp->next; 
    } 
    if(c==0) 
     add(num); 
    else if(c<count()) 
     addafter(num,++c); 
    else 
     append(num); 
    } 
} 



int delete(int num) 
{ 
    struct node *temp, *prev; 
    temp=head; 
    while(temp!=NULL) 
    { 
    if(temp->data==num) 
    { 
     if(temp==head) 
     { 
     head=temp->next; 
     free(temp); 
     return 1; 
     } 
     else 
     { 
     prev->next=temp->next; 
     free(temp); 
     return 1; 
     } 
    } 
    else 
    { 
     prev=temp; 
     temp= temp->next; 
    } 
    } 
    return 0; 
} 


void display(struct node *r) 
{ 
    r=head; 
    if(r==NULL) 
    { 
    return; 
    } 
    while(r!=NULL) 
    { 
    printf("%d ",r->data); 
    r=r->next; 
    } 
    printf("\n"); 
} 


int main() 
{ 
    int i,num; 
    struct node *n; 
    head=NULL; 
    while(1) 
    { 
    printf("\nList Operations\n"); 
    printf("===============\n"); 
    printf("1.Insert\n"); 
    printf("2.Display\n"); 
    printf("3.Size\n"); 
    printf("4.Delete\n"); 
    printf("5.Exit\n"); 
    printf("Enter your choice : "); 
    if(scanf("%d",&i)<=0){ 
     printf("Enter only an Integer\n"); 
     exit(0); 
    } else { 
     switch(i) 
     { 
     case 1:  printf("Enter the number to insert : "); 
       scanf("%d",&num); 
       insert(num); 
       break; 
     case 2:  if(head==NULL) 
       { 
       printf("List is Empty\n"); 
       } 
       else 
       { 
       printf("Element(s) in the list are : "); 
       } 
       display(n); 
       break; 
     case 3:  printf("Size of the list is %d\n",count()); 
       break; 
     case 4:  if(head==NULL) 
       printf("List is Empty\n"); 
       else{ 
       printf("Enter the number to delete : "); 
       scanf("%d",&num); 
       if(delete(num)) 
        printf("%d deleted successfully\n",num); 
       else 
        printf("%d not found in the list\n",num); 
       } 
       break; 
     case 5:  return 0; 
     default: printf("Invalid option\n"); 
     } 
    } 
    } 
    return 0; 
} 
+0

您遇到,編譯或運行的時間有哪些錯誤? – ColWhi 2013-02-19 08:48:23

+3

這不是C++,那是C. – 2013-02-19 08:49:42

+0

它不編譯。 – ninadeleon 2013-02-19 08:49:57

回答

0

我做了另一個工作程序。看看這個。你可能會有一些補充,也許?

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

class Node { 
     int data; 
     Node* next; 
     public: 
      Node() {}; 
      void SetData(int aData) { data = aData; }; 
      void SetNext(Node* aNext) { next = aNext; }; 
      int Data() { return data; }; 
      Node* Next() { return next; }; 
}; 

class List { 
     Node *head; 
     public: 
      List() { head = NULL; }; 
      void Display(); 
      void Append(int data); 
      void Remove(int data); 
}; 

void List::Display() { 
    Node *tmp = head; 
    if (tmp == NULL) { 
      cout << "EMPTY" << endl; 
      return; 
    } 
    if (tmp->Next() == NULL) { 
      cout << tmp->Data(); 
      cout << " --> "; 
      cout << "NULL" << endl; 
      } 
    else { 
      do { 
       cout << tmp->Data(); 
       cout << " --> "; 
       tmp = tmp->Next(); 
      } while (tmp != NULL); 
    cout << "NULL" << endl; 
    } 
} 

void List::Append(int data) { 
    Node* newNode = new Node(); 
    newNode->SetData(data); 
    newNode->SetNext(NULL); 
    Node *tmp = head; 
    if (tmp != NULL) { 
      while (tmp->Next() != NULL) { 
       tmp = tmp->Next(); 
      } 
    tmp->SetNext(newNode); 
    } 
    else { 
      head = newNode; 
    } 
} 

void List::Remove(int data) { 
    Node *tmp = head; 
    if (tmp == NULL) 
      return; 
    if (tmp->Next() == NULL) { 
      delete tmp; 
      head = NULL; 
    } 
    else { 
      Node *prev; 
      do { 
       if (tmp->Data() == data) break; 
       prev = tmp; 
       tmp = tmp->Next(); 
      } while (tmp != NULL); 
    prev->SetNext(tmp->Next()); 
    delete tmp; 
    } 
} 

int main() { 
    List list; 
    int n[100], i, size; 
    char choice; 
    for(i=1; i<=100; i++){ 
      cout<<"Insert[I]\nDisplay[D]\nRemove[R]\n"; 
      cin>>choice; 
      if (choice=='I'||choice=='i'){ 
             cout<<"Enter the number of nodes: "; 
             cin>>size; 
             cout<<"Enter a number to be inserted:\n"; 
             for(i=1; i<=size; i++){ 
                 cin>>n[i]; 
                 list.Append(n[i]); 
             } 
      } 
      if (choice=='D'||choice=='d'){ 
             cout<<"Elements in the list are: "; 
             list.Display(); 
      } 
      if (choice=='R'||choice=='r'){ 
             cout<<"Enter a number to be removed: "; 
             cin>>n[i]; 
             list.Remove(n[i]); 
      } 
    } 
    getch(); 
} 
+0

這段代碼是否正常工作? o.0 – 2014-01-15 10:49:24