C program to perform stack operation using singly linked list
Answers were Sorted based on User's Feedback
Answer / saad
#include<stdio.h>
#include<alloc.h>
#include<conio.h>
struct node
{
int data;
struct node* next;
};
typedef struct node node;
node* curr_ptr=NULL;
node* head=NULL;
int count=0;
#define max 5
main()
{
int stack_size;
int choice;
int ele;
clrscr();
while(1)
{
printf("\n\n\t1.Push\n\t2.Pop\n\t3.Display\n\t4.Exit\n");
printf("\n\tEnter Your Choice: ");
scanf("%d",&choice);
switch(choice)
{
case 1: if(count==max)
{
printf("\n\n\t\tSTACK OVERFLOW!!!");
clrscr();
}
else
{
printf("\n\n\t\tEnter The Element To Push: ");
scanf("%d",&ele);
Push(ele);
}
break;
case 2: if(count==0)
{
printf("\n\n\t\tSTACK UNDERFLOW!!!");
}
else
Pop();
break;
case 3: Display();
break;
case 4: exit();
break;
}
}
}
Push(int info)
{
node* new_node;
new_node=(node*)malloc(sizeof(node));
new_node->data=info;
new_node->next=NULL;
if(head==0)
{
head=new_node;
curr_ptr=head;
count++;
}
else
{
curr_ptr->next=new_node;
curr_ptr=curr_ptr->next;
count++;
}
return;
}
Pop()
{
node* pre_node, *temp1;
node* temp=head;
if(count==1)
{
head=0;
free(temp);
printf("\n\n\t\tNode is Deleted");
return;
}
else
{
while(temp->next!=0)
{
pre_node=temp;
temp=temp->next;
}
printf("%d",pre_node->data);
temp1=pre_node->next;
pre_node->next=NULL;
free(temp1);
}
return;
}
Display()
{
node* temp=head;
if(head==NULL)
{
printf("\n\tList Empty!!!");
return;
}
while(temp!=NULL)
{
printf("%d\t",temp->data);
temp=temp->next;
}
return;
}
| Is This Answer Correct ? | 24 Yes | 5 No |
Answer / bin fang
the above has bugs! for example, the count is not
decremented in Pop function...
I rewrote the Push and Pop code as follows:
node *cur = NULL;
node *head = NULL;
void Push(int info)
{
node *new;
new = (node *)malloc(sizeof(node));
new->data = info;
new->next = NULL;
if (head == NULL)
head = new;
else
cur->next = new;
cur = new;
count++;
}
void Pop(void)
{
node *pre = NULL;
node *temp = head;
while (temp != cur) {
pre = temp;
temp = temp->next;
}
printf("\n\tNode (%d) is deleted.", cur->data);
free(cur);
count--;
cur = pre;
if (cur)
cur->next = NULL;
else
head = NULL;
}
| Is This Answer Correct ? | 10 Yes | 1 No |
Answer / bin fang
And much better and simpler implementation should be like
this:
void Push(int info)
{
node *temp;
temp = (node *)malloc(sizeof(node));
temp->data = info;
temp->next = head;
head = temp;
count++;
}
void Pop(void)
{
node *temp;
temp = head;
head = head->next;
free(temp);
count--;
}
| Is This Answer Correct ? | 7 Yes | 2 No |
What is the relation between # and include<stdio.h>
how i m write c program 1.check prime number 2.prime number series
Ca some one please help me with aC code to allow user enter numbers from 1 to 20 without repeating and prnt the sum of those numbers thnx
read an array and search an element
Can you define which header file to include at compile time?
what is the output of the following program? #include<stdio.h> void main() { int x=4,y=3,z; z=x-- -y; printf("\n%d %d %d",x,y,z); }
Explain the difference between ++u and u++?
Explain the use of keyword 'register' with respect to variables.
what is the difference between malloc() and calloc() function?
how memory store byte
which of the following go out of the loopo if expn 2 becoming false a.while(expn 1){...if(expn 2)continue;} b.while(!expn 1){if(expn 2)continue;...} c.do{..if(expn 1)continue;..}while(expn 2); d.while(!expn 2){if(expn 1)continue;..}
a=0; b=(a=0)?2:3; a) What will be the value of b? why b) If in 1st stmt a=0 is replaced by -1, b=? c) If in second stmt a=0 is replaced by -1, b=?