2015-02-06 2 views
-4

Я пытаюсь удалить реализацию стека одиночно связанных списков. У меня есть массив стека для моей программы.удалять несколько списков стеков в C

struct node 
{ 
    int data; 
    struct node *next; 
}*start=NULL,*current; 

В моем основном у меня есть что-то вроде этого.

void main() 
{ 
     struct node top[99]; 
     //Input data here for stack top 
     //Push function 
     //This is where I implement stack and SLL 
     printf("\n\nDo you want to try again?(Y/N) "); 
     fflush(stdin); 
     choice=getch(); 
     if(choice=='y' || choice=='Y') 
     { 
      deleteall();//delete the sinly linked list 
         //which is working fine. no problem 

      for(y=0;y<n;y++) 
      { 
       delStack(&top[y]);//here delete the stack sll. 


      } 
     } 

Проблема заключается в том, что я набираю «Y», чтобы повторить попытку. Он замерзнет или что-то в этом роде. Все было хорошо, пока я не выполнил функцию delStack.

void delStack(struct node **head) 
{ 
    struct node *ptr; 
    ptr=*head; 
    while(head!=NULL) 
    { 
     ptr=*head; 
     ptr=ptr->next;//when i try head=head->next why does it give me non portable pointer conversion? 
     free(ptr); 
    } 
} 

EDIT

здесь весь код моей программы. Теперь он работает, но при следующей попытке он печатает бесконечный цикл моих входов.

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

struct node 
{ 
    int data; 
    struct node *next; 
}*start=NULL,*current; 


int Sempty(struct node *temp) { 
    if (temp == NULL) 
     return 1; 
    else 
     return 0; 
} 

struct node * get_node(int item) { 
    struct node * temp; 
    temp = (struct node *) malloc(sizeof(struct node)); 
    if (temp == NULL) 
     printf("\nMemory Cannot be allocated"); 
    temp->data = item; 
    temp->next = NULL; 
    return (temp); 
} 

void Push(int Item, struct node **top) { 
    struct node *New; 
    struct node * get_node(int); 
    New = get_node(Item); 
    New->next = *top; 
    *top = New; 
} 


void Display(struct node **head) { 
    struct node *temp; 

    temp = *head; 

    if (Sempty(temp)) 
     printf("\n"); 
    else { 
     while (temp != NULL) { 
     //printf("\t\t");  
    //  gotoxy(10,x); 
     printf("%d ", temp->data); 
     temp = temp->next; 
    // x++; 
     } 
    } 
    printf("\n"); 
    //getch(); 
} 

void display(int divi) 
{ 
    struct node *temp; 
    int x=2; 
    temp=start; 
    while(temp!=NULL) 
    { 
    gotoxy(1,x); 
    printf("%d-%d",temp->data-divi,temp->data-1); 
    temp=temp->next; 
    x++; 
    } 

    //printf("\n\n"); 
} 


void creat(int num) 
{ 
     struct node *new_node; 

     new_node=malloc(sizeof(struct node)); 


     new_node->data=num; 
     new_node->next=NULL; 

     if(start==NULL) 
     { 
     start=new_node; 
     current=new_node; 

     } 
     else 
     { 
     current->next=new_node; 
     current=new_node; 
     } 
     //printf("%d->",new_node->data); 
} 

void deleteall() 
{ 
    struct node *ptr; 

    ptr=start; 
    while (start!=NULL) 
    { 
     ptr=start; 
     start=start->next; 
     free(ptr); 
    } 

} 

void delStack(struct node **head) 
{ 
    struct node *ptr; 
    struct node *temp; 
    ptr=*head; 
    while(ptr!=NULL) 
    { 
     temp = ptr; 
     ptr=ptr->next; 
     free(temp); 
    } 
} 

void main() 
{ 

    int binrange,max=100,n,i,divi,j,k,l,flag=0,y,x; 
    int inp[5]; 
    char choice; 
    struct node *top[99]={0}; 
    while(flag!=1) 
    { 
     x=2; 
     k=0; 
     clrscr(); 
     printf("enter 5 numbers:\n"); 
     for(i=0;i<5;i++) 
     { 
      scanf("%d",&inp[i]); 
     } 
     printf("\nenter range: "); 
     scanf("%d",&binrange); 
     n=max/binrange; 
     divi=max/n; 
     clrscr(); 
     printf("BINRANGE\tDATA"); 
     for(i=0;i<=max;i++) 
     { 
      if(i%divi==0 && i>0) 
      { 
       //create nodes here 
       //store i into nodes 
       creat(i); 



       for(j=0;j<5;j++) 
       { 
        if(inp[j]<i && inp[j]>=i-divi) 
        { 
         Push(inp[j],&top[k]); 
        } 
       } 
       if(k<n) 
       { 
       //printf("\n"); 
       gotoxy(17,x); 
       Display(&top[k]); 
       } 
       k++; 
       x++; 

      } 


     } 

     display(divi); 
     printf("\n\nDo you want to try again?(Y/N) "); 
     fflush(stdin); 
     choice=getch(); 
     if(choice=='y' || choice=='Y') 
     { 
      deleteall(); 

      for(y=0;y<n;y++) 
      { 
       delStack(&top[y]); 


      } 
     } 
     else 
     { 
      flag=1; 
     } 



    } 

} 
+0

Показать минимальный рабочий пример. –

ответ

1
struct node *temp = NULL; 
while(ptr!=NULL) 
{ 
    temp = ptr; 
    ptr=ptr->next; 
    free(temp); 
} 

Вы имели бесконечный цикл

+0

Неопределенное поведение. Более 9000 репутации пользователь написал это ??? – reader

+1

Мышление об этом. Но приведенный выше код по-прежнему не работает. – imagineracoon

+0

No problem - down-vote удален, –

 Смежные вопросы

  • Нет связанных вопросов^_^