Я пытаюсь удалить реализацию стека одиночно связанных списков. У меня есть массив стека для моей программы.удалять несколько списков стеков в 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;
}
}
}
Показать минимальный рабочий пример. –