this is the code for Q1
err dont laugh at me hehehe
Code:
#include<stdio.h>
#include<conio.h>
#define MAX 10
struct st_a{
int topmost;
int stack[MAX] ;
};
struct st_a s;
struct stl{
int data;
struct stl*next ;
}*top,*p,*q;
void stack_array();
void stack_llist();
void main()
{
int i,ch,ch1;
char reverse[MAX];
char c;
clrscr();
printf("PROGRAM TO IMPLEMENT STACKS USING ARRAY & USING LINKED LIST");
do{
printf(" Select method to implement stacks.../n");
printf("1.Array");
printf("2.linked list");
printf("3.Exit");
printf("your choice:");
scanf("%d",&ch);
switch(ch)
{
case 1:
stack_array();
break;
case 2:
stack_llist();
break;
case 3:
exit();
default:
printf("Invalid choice");
break;
}
printf("Return to main menu?y/n:");
scanf("%s",&c);
} while(c=='y');
getch();
}
void stack_array()
{
void push_array();
void pop_array();
void display_array();
int i,ch2 ;
char c1;
printf("IMPLEMENTAION OF STACKS USING ARRAY");
do
{
printf("*******MENU*******");
printf("1.Push\n");
printf("2.Pop\n");
printf("3.Display\n");
printf("4.Exit\n");
printf("your choice:\n");
scanf("%d",&ch2);
switch(ch2)
{
case 1:
push_array();
break;
case 2:
pop_array();
break;
case 3:
display_array();
break;
case 4:
exit();
default:
printf("Invalid choice");
break;
}
printf("Want to perform another operation?y/n:");
scanf("%s",&c1);
} while(c1=='y');
}
int full()
{
if(s.topmost==MAX)
return 1;
else
return 0;
}
int empty()
{
if(s.topmost==0)
return 1;
else
return 0;
}
void push_array()
{
int full();
char ch3;
s.topmost=0;
do{
if(full()==1)
{
printf("The Stack is full!!");
break;
}
else
{
s.topmost++;
printf("Enter the Element to be pushed : ");
scanf("%d",&s.stack[s.topmost]);
printf(" Push another element?y/n?:");
flushall();
scanf("%s",&ch3);
}
} while(ch3=='y' || ch3=='Y');
}
void pop_array()
{
int empty();
char ch;
do{
if(empty()==1)
{
printf("The Stack is Empty!!");
break;
}
else
{
printf("%d has been POPPED!",s.stack[s.topmost]);
s.stack[s.topmost--]=0;
printf("Pop other element?y/n:");
scanf("%s",&ch);
}
} while(ch=='y' || ch=='Y');
}
void display_array()
{
int i;
if(empty()==1)
printf("No Records!!!!!!");
else
{
printf("The contents of the stack are....");
for(i=s.topmost ;i>=1; i--)
printf("%d",s.stack[i]);
}
}
/* Implementation of stacks using linked list */
void stack_llist()
{
int* push_llist(struct stl *,struct stl *);
int* pop_llist(struct stl *,struct stl *);
void display_llist(struct stl *);
int i,ch5 ;
char c5;
printf("IMPLEMENTAION OF STACKS USING LINKED LIST");
do
{
printf("*****MENU*******");
printf("1.Push\n");
printf("2.Pop\n");
printf("3.Display\n");
printf("4.Exit\n");
printf ("your choice:");
scanf("%d",&ch5);
switch(ch5)
{
case 1:
top=push_llist(top,p);
break;
case 2:
top=pop_llist(top,q);
break;
case 3:
display_llist(top);
break;
case 4:
exit();
default:
printf("Invalid choice");
break;
}
printf("Want to perform another operation?y/n:");
scanf("%s",&c5);
}while(c5=='y');
}
int* push_llist(struct stl *top,struct stl *p)
{
void display_llist(struct stl *);
int num;
char c7;
do{
printf("Enter the Element to be pushed : ");
scanf("%d",&num);
p=malloc(sizeof(struct stl));
p->data=num;
p->next=NULL;
if(top==NULL)
top=p;
else
{
p->next=top;
top=p;
}
printf("Push another element?y/n?:");
scanf("%s",&c7);
} while(c7=='y' || c7=='Y');
return(top);
}
int* pop_llist(struct stl *top,struct stl *q)
{
void display_llist(struct stl *);
char c8;
do{
if(top==NULL)
{
printf("List is empty!");
break;
}
else
{
q=top;
top=top->next;
q->next=NULL;
free(q);
}
printf("Pop other element?y/n:");
scanf("%s",&c8);
} while(c8=='y' || c8=='Y');
return(top);
}
void display_llist(struct stl *top)
{
if(top==NULL)
printf("stack is empty!!");
else
{
q=top;
printf ( "contents of stack are: " ) ;
while ( q!= NULL ) /* traverse the entire linked list */
{
printf ( "%d ", q -> data ) ;
q = q -> next ;
}
reverse[y] = text[i];
printf(" %c\n", reverse[y]);
y++;
}
printf("\nAfter string was reverse: ");
for (i=0; i<=8; i++)
{
printf("%c", reverse[i]);
}
}